diff -Nru 3depict-0.0.19-1/aclocal.m4 3depict-0.0.20/aclocal.m4 --- 3depict-0.0.19-1/aclocal.m4 2016-05-31 01:39:57.000000000 +0000 +++ 3depict-0.0.20/aclocal.m4 2017-02-05 00:09:52.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,32 +20,63 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant . -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -67,18 +98,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -88,8 +120,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -101,10 +135,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -112,19 +147,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -178,9 +211,92 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -192,10 +308,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -211,14 +327,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -263,15 +379,14 @@ # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -302,7 +417,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -493,7 +608,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -569,7 +684,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -659,8 +774,8 @@ # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -733,7 +848,11 @@ END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further @@ -762,7 +881,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -773,7 +892,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -783,7 +902,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -804,7 +923,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -854,7 +973,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -893,7 +1012,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -922,7 +1041,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -969,7 +1088,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -988,7 +1107,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1069,7 +1188,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1129,7 +1248,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1157,7 +1276,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1176,7 +1295,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1307,6 +1426,8 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/ax_compiler_vendor.m4]) +m4_include([m4/ax_compiler_version.m4]) m4_include([m4/ftgl.m4]) m4_include([m4/gsl.m4]) m4_include([m4/wxwin.m4]) diff -Nru 3depict-0.0.19-1/ChangeLog 3depict-0.0.20/ChangeLog --- 3depict-0.0.19-1/ChangeLog 2016-05-31 00:04:05.000000000 +0000 +++ 3depict-0.0.20/ChangeLog 2017-02-04 23:56:31.000000000 +0000 @@ -1,4 +1,34 @@ -* ?? Jun 2016 : 0.0.19 +* 04 Feb 2016 : 0.0.20 + Features: + - Add "TAPSIM" file loader + - All vector input values can now be specified in ISO31-11 + spherical co-ordinates, using an angle-bracket notation, like + so: (in degrees), example <1,10,45 > + - New "voxel slice" tool (cut voxel data as arbitrary plane) + + User Visible Changes: + - Local Concentration has now been renamed to "Local + Chemistry", and the function it computes has changed (was n/(n+d), now n/d (n-> numerator, d-> denominator)) + - Filters in tree can now be moved using a "splice" operation, which moves only the filter + - Ion colour now has an "auto-bounds" mode + - New colour maps : "Inferno" and "Viridis" + - Improve progress during ATO file loading + - Binomial mode did not work in many cases, due to grid construction bugs. Now fixed. + - Anisotropic scaling now fixed - input data should be able to be given by user + + + Technical Bugfixes/changes: + - Fix for crash during drag-drop operations + - Fix spatial analysis set operation: Union. Was not implemented + - Fix hang in local concentration when using the same elements + - Fix Stem/Bar/Step mode when plotting + - Fix morphology plot not showing in cluster analysis + - (Source only) "openvdb-isosurf" Branch for OpenVDB based + voxelisation and isosurface construction (thanks to L Gartmair) + - Added french and spanish partial translations (fr_FR, es_ES) + + +* 31 May 2016 : 0.0.19 Features: - New "Local concentration" algorithm in spatial analysis filter - Add text and VTK export to Export Pos dialog diff -Nru 3depict-0.0.19-1/compile 3depict-0.0.20/compile --- 3depict-0.0.19-1/compile 2016-05-31 00:20:05.000000000 +0000 +++ 3depict-0.0.20/compile 2016-11-01 23:33:03.000000000 +0000 @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, 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, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru 3depict-0.0.19-1/configure 3depict-0.0.20/configure --- 3depict-0.0.19-1/configure 2016-05-31 01:39:58.000000000 +0000 +++ 3depict-0.0.20/configure 2017-02-05 00:09:53.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for 3Depict 0.0.19. +# Generated by GNU Autoconf 2.69 for 3Depict 0.0.20. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ # Identity of this package. PACKAGE_NAME='3Depict' PACKAGE_TARNAME='3depict' -PACKAGE_VERSION='0.0.19' -PACKAGE_STRING='3Depict 0.0.19' +PACKAGE_VERSION='0.0.20' +PACKAGE_STRING='3Depict 0.0.20' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -622,6 +622,7 @@ am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +SED DEBUG_FLAGS OPENMP_FLAGS GETTEXT_LIBS @@ -745,6 +746,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -852,6 +854,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1104,6 +1107,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1241,7 +1253,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1354,7 +1366,7 @@ # 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 3Depict 0.0.19 to adapt to many kinds of systems. +\`configure' configures 3Depict 0.0.20 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,6 +1406,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1424,7 +1437,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of 3Depict 0.0.19:";; + short | recursive ) echo "Configuration of 3Depict 0.0.20:";; esac cat <<\_ACEOF @@ -1556,7 +1569,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -3Depict configure 0.0.19 +3Depict configure 0.0.20 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2374,7 +2387,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by 3Depict $as_me 0.0.19, which was +It was created by 3Depict $as_me 0.0.20, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2722,7 +2735,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -am__api_version='1.14' +am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -2923,8 +2936,8 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in @@ -2943,7 +2956,7 @@ $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -3237,7 +3250,7 @@ # Define the identity of the package. PACKAGE='3depict' - VERSION='0.0.19' + VERSION='0.0.20' cat >>confdefs.h <<_ACEOF @@ -3271,8 +3284,8 @@ # mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -3329,6 +3342,7 @@ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7279,15 +7293,7 @@ $as_echo "#define USE_MGL2 1 " >>confdefs.h -as_ac_Header=`$as_echo "ac_cv_header_"mgl2/mgl_cf.h"" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" ""mgl2/mgl_cf.h"" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - -else - as_fn_error $? "\"mgl2 specified, but header mgl2/mgl_cf.h not found\"" "$LINENO" 5 -fi - - +#AC_CHECK_HEADER("mgl2/mgl_cf.h",[],[AC_MSG_ERROR(["mgl2 specified, but header mgl2/mgl_cf.h not found"])],[]) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7677,128 +7683,1197 @@ if test x"$enable_debug_checks" == x"yes" ; then - if test x"$enable_openmp_parallel" != x"" ; - then - #Note that GLIBCXX_DEBUG cannot exist with GLIBCXX_PARALLEL - DEBUG_FLAGS="-DDEBUG" + DEBUG_FLAGS="-DDEBUG" - else - DEBUG_FLAGS="-DDEBUG -D_GLIBCXX_DEBUG" - fi + if test x"$GCC" == x"yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 +$as_echo_n "checking for C compiler vendor... " >&6; } +if ${ax_cv_c_compiler_vendor+:} false; then : + $as_echo_n "(cached) " >&6 +else + # note: don't check for gcc first since some other compilers define __GNUC__ + vendors="intel: __ICC,__ECC,__INTEL_COMPILER + ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ + pathscale: __PATHCC__,__PATHSCALE__ + clang: __clang__ + cray: _CRAYC + fujitsu: __FUJITSU + gnu: __GNUC__ + sun: __SUNPRO_C,__SUNPRO_CC + hp: __HP_cc,__HP_aCC + dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER + borland: __BORLANDC__,__CODEGEARC__,__TURBOC__ + comeau: __COMO__ + kai: __KCC + lcc: __LCC__ + sgi: __sgi,sgi + microsoft: _MSC_VER + metrowerks: __MWERKS__ + watcom: __WATCOMC__ + portland: __PGI + tcc: __TINYC__ + unknown: UNKNOWN" + for ventest in $vendors; do + case $ventest in + *:) vendor=$ventest; continue ;; + *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - if test x"$GCC" = x"yes" ; then - # Strip optimsation flags from debug build - #-- +int +main () +{ - CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9s]*//g'` - CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/-O[0-9s]*//g'` + #if !($vencpp) + thisisanerror; + #endif - CFLAGS="$CFLAGS -g" - CXXFLAGS="$CXXFLAGS -g" - #-- + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + ax_cv_c_compiler_vendor=`echo $vendor | cut -d: -f1` - #Check for UbSan availability - #-- - if test x"${enable_no_ubsan}" == x"no" ; then +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 +$as_echo "$ax_cv_c_compiler_vendor" >&6; } - USE_UBSAN="no" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + 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_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - case "${host_os}" in - *inux*) - GCC_VER=`gcc --version | head -n 1 | awk '{ print $(NF)}'` + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed - # Used to indicate true or false condition - ax_compare_version=false - # Convert the two version strings to be compared into a format that - # allows a simple string comparison. The end result is that a version - # string of the form 1.12.5-r617 will be converted to the form - # 0001001200050617. In other words, each number is zero padded to four - # digits, and non digits are removed. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +$as_echo_n "checking for C compiler version... " >&6; } +if ${ax_cv_c_compiler_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ax_cv_c_compiler_vendor in #( + intel) : + if ac_fn_c_compute_int "$LINENO" "__INTEL_COMPILER/100" "_ax_c_compiler_version_major" ""; then : - ax_compare_version_A=`echo " $GCC_VER " | sed -e 's/\([0-9]*\)/Z\1Z/g' \ - -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/[^0-9]//g'` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_INTEL unknown intel compiler version +See \`config.log' for more details" "$LINENO" 5; } +fi + if ac_fn_c_compute_int "$LINENO" "(__INTEL_COMPILER%100)/10" "_ax_c_compiler_version_minor" ""; then : - ax_compare_version_B=`echo "4.9" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ - -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/[^0-9]//g'` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_INTEL unknown intel compiler version +See \`config.log' for more details" "$LINENO" 5; } +fi + if ac_fn_c_compute_int "$LINENO" "(__INTEL_COMPILER%10)" "_ax_c_compiler_version_patch" ""; then : - ax_compare_version=`echo "x$ax_compare_version_A -x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_INTEL unknown intel compiler version +See \`config.log' for more details" "$LINENO" 5; } +fi + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + ibm) : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - if test "$ax_compare_version" = "true" ; then - USE_UBSAN="yes" - else USE_UBSAN="no" - fi +int +main () +{ + #if defined(__COMPILER_VER__) + choke me; + #endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_compute_int "$LINENO" "__xlC__/100" "_ax_c_compiler_version_major" ""; then : - # Used to indicate true or false condition - ax_compare_version=false +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi - # Convert the two version strings to be compared into a format that - # allows a simple string comparison. The end result is that a version - # string of the form 1.12.5-r617 will be converted to the form - # 0001001200050617. In other words, each number is zero padded to four - # digits, and non digits are removed. + if ac_fn_c_compute_int "$LINENO" "__xlC__%100" "_ax_c_compiler_version_minor" ""; then : - ax_compare_version_A=`echo " $GCC_VER " | sed -e 's/\([0-9]*\)/Z\1Z/g' \ - -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/[^0-9]//g'` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + if ac_fn_c_compute_int "$LINENO" "__xlC_ver__/0x100" "_ax_c_compiler_version_patch" ""; then : - ax_compare_version_B=`echo "6.0" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ - -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ - -e 's/[^0-9]//g'` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + if ac_fn_c_compute_int "$LINENO" "__xlC_ver__%0x100" "_ax_c_compiler_version_build" ""; then : - ax_compare_version=`echo "x$ax_compare_version_A -x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler build version +See \`config.log' for more details" "$LINENO" 5; } +fi + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch.$_ax_c_compiler_version_build" +else - if test "$ax_compare_version" = "true" ; then - USE_UBSAN_GCC6="yes" - else USE_UBSAN_GCC6="no" - fi + if ac_fn_c_compute_int "$LINENO" "__xlC__%1000" "_ax_c_compiler_version_patch" ""; then : - ;; - esac +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi - if test x"$USE_UBSAN" == x"yes" ; then - CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return -fsanitize=integer-divide-by-zero -fsanitize=vla-bound -fsanitize=null -fsanitize=signed-integer-overflow" - CXXFLAGS="$CXXFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return -fsanitize=integer-divide-by-zero -fsanitize=vla-bound -fsanitize=null -fsanitize=signed-integer-overflow" - LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return " - { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"Enabling Gcc-UbSan\"" >&5 -$as_echo "\"Enabling Gcc-UbSan\"" >&6; }; - fi + if ac_fn_c_compute_int "$LINENO" "(__xlC__/10000)%10" "_ax_c_compiler_version_minor" ""; then : - if test x"$USE_UBSAN_GCC6" == x"yes" ; then - CFLAGS="$CFLAGS -fsanitize=bounds-strict" - CXXFLAGS="$CXXFLAGS -fsanitize=bounds-strict" - LDFLAGS="$LDFLAGS -fsanitize=bounds-strict" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"Enabling More Gcc-UbSan (gcc6)\"" >&5 -$as_echo "\"Enabling More Gcc-UbSan (gcc6)\"" >&6; }; - fi +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__xlC__/100000)%10" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_IBM unknown IBM compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; #( + pathscale) : + + if ac_fn_c_compute_int "$LINENO" "__PATHCC__" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PATHSCALE unknown pathscale major +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__PATHCC_MINOR__" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PATHSCALE unknown pathscale minor +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__PATHCC_PATCHLEVEL__" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PATHSCALE unknown pathscale patch level +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + clang) : + + if ac_fn_c_compute_int "$LINENO" "__clang_major__" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_CLANG unknown clang major +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__clang_minor__" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_CLANG unknown clang minor +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__clang_patchlevel__" "_ax_c_compiler_version_patch" ""; then : + +else + 0 +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + cray) : + + if ac_fn_c_compute_int "$LINENO" "_RELEASE" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_CRAY unknown crayc release +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "_RELEASE_MINOR" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_CRAY unknown crayc minor +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor" + ;; #( + fujitsu) : + + if ac_fn_c_compute_int "$LINENO" "__FCC_VERSION" "ax_cv_c_compiler_version" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_FUJITSUunknown fujitsu release +See \`config.log' for more details" "$LINENO" 5; } +fi + + ;; #( + gnu) : + + if ac_fn_c_compute_int "$LINENO" "__GNUC__" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_GNU unknown gcc major +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__GNUC_MINOR__" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_GNU unknown gcc minor +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__GNUC_PATCHLEVEL__" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_GNU unknown gcc patch level +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + sun) : + + + if ac_fn_c_compute_int "$LINENO" "!!( + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + < 0x1000)" "_ax_c_compiler_version_until59" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun release version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if test "X$_ax_c_compiler_version_until59" = X1; then : + if ac_fn_c_compute_int "$LINENO" " + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + % 0x10" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + / 0x10) % 0x10" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + / 0x100)" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + +else + if ac_fn_c_compute_int "$LINENO" " + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + % 0x10" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + / 0x100) % 0x100" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + / 0x1000)" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SUN unknown sun major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + hp) : + + + if ac_fn_c_compute_int "$LINENO" "!!( + #if defined(__HP_cc) + __HP_cc + #else + __HP_aCC + #endif + <= 1)" "_ax_c_compiler_version_untilA0121" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_HP unknown hp release version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if test "X$_ax_c_compiler_version_untilA0121" = X1; then : + ax_cv_c_compiler_version="01.21.00" + +else + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__HP_cc) + __HP_cc + #else + __HP_aCC + #endif + % 100)" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_HP unknown hp release version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(( + #if defined(__HP_cc) + __HP_cc + #else + __HP_aCC + #endif + / 100)%100)" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_HP unknown hp minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(( + #if defined(__HP_cc) + __HP_cc + #else + __HP_aCC + #endif + / 10000)%100)" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_HP unknown hp major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + +fi + ;; #( + dec) : + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__DECC_VER) + __DECC_VER + #else + __DECCXX_VER + #endif + % 10000)" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_DEC unknown dec release version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(( + #if defined(__DECC_VER) + __DECC_VER + #else + __DECCXX_VER + #endif + / 100000UL)%100)" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_DEC unknown dec minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(( + #if defined(__DECC_VER) + __DECC_VER + #else + __DECCXX_VER + #endif + / 10000000UL)%100)" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_DEC unknown dec major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + borland) : + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + #if defined(__TURBOC__) + __TURBOC__ + #else + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_compute_int "$LINENO" " + #if defined(__TURBOC__) + __TURBOC__ + #else + choke me + #endif + " "_ax_c_compiler_version_turboc_raw" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_BORLAND unknown turboc version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if test $_ax_c_compiler_version_turboc_raw -lt 661 || test $_ax_c_compiler_version_turboc_raw -gt 1023; then : + if ac_fn_c_compute_int "$LINENO" " + #if defined(__TURBOC__) + __TURBOC__ + #else + choke me + #endif + % 0x100" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_BORLAND unknown turboc minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(__TURBOC__) + __TURBOC__ + #else + choke me + #endif + /0x100)%0x100" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_BORLAND unknown turboc major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="0turboc:$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor" +else + case $_ax_c_compiler_version_turboc_raw in #( + 661) : + ax_cv_c_compiler_version="0turboc:1.00" ;; #( + 662) : + ax_cv_c_compiler_version="0turboc:1.01" ;; #( + 663) : + ax_cv_c_compiler_version="0turboc:2.00" ;; #( + *) : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: [_AX_COMPILER_VERSION_BORLAND] unknown turboc version between 0x295 and 0x400 please report bug" >&5 +$as_echo "$as_me: WARNING: [_AX_COMPILER_VERSION_BORLAND] unknown turboc version between 0x295 and 0x400 please report bug" >&2;} + ax_cv_c_compiler_version="" + ;; +esac + +fi + +else + # borlandc + + if ac_fn_c_compute_int "$LINENO" " + #if defined(__BORLANDC__) + __BORLANDC__ + #else + __CODEGEARC__ + #endif + " "_ax_c_compiler_version_borlandc_raw" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_BORLAND unknown borlandc version +See \`config.log' for more details" "$LINENO" 5; } +fi + + case $_ax_c_compiler_version_borlandc_raw in #( + 512 ) : + ax_cv_c_compiler_version="1borlanc:2.00" ;; #( + 1024) : + ax_cv_c_compiler_version="1borlanc:3.00" ;; #( + 1024) : + ax_cv_c_compiler_version="1borlanc:3.00" ;; #( + 1040) : + ax_cv_c_compiler_version="1borlanc:3.1" ;; #( + 1106) : + ax_cv_c_compiler_version="1borlanc:4.0" ;; #( + 1280) : + ax_cv_c_compiler_version="1borlanc:5.0" ;; #( + 1312) : + ax_cv_c_compiler_version="1borlanc:5.02" ;; #( + 1328) : + ax_cv_c_compiler_version="2cppbuilder:3.0" ;; #( + 1344) : + ax_cv_c_compiler_version="2cppbuilder:4.0" ;; #( + 1360) : + ax_cv_c_compiler_version="3borlancpp:5.5" ;; #( + 1361) : + ax_cv_c_compiler_version="3borlancpp:5.51" ;; #( + 1378) : + ax_cv_c_compiler_version="3borlancpp:5.6.4" ;; #( + 1392) : + ax_cv_c_compiler_version="4cppbuilder:2006" ;; #( + 1424) : + ax_cv_c_compiler_version="4cppbuilder:2007" ;; #( + 1555) : + ax_cv_c_compiler_version="4cppbuilder:2009" ;; #( + 1569) : + ax_cv_c_compiler_version="4cppbuilder:2010" ;; #( + 1584) : + ax_cv_c_compiler_version="5xe" ;; #( + 1600) : + ax_cv_c_compiler_version="5xe:2" ;; #( + 1616) : + ax_cv_c_compiler_version="5xe:3" ;; #( + 1632) : + ax_cv_c_compiler_version="5xe:4" ;; #( + *) : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: [_AX_COMPILER_VERSION_BORLAND] Unknow borlanc compiler version $_ax_c_compiler_version_borlandc_raw please report bug" >&5 +$as_echo "$as_me: WARNING: [_AX_COMPILER_VERSION_BORLAND] Unknow borlanc compiler version $_ax_c_compiler_version_borlandc_raw please report bug" >&2;} + ;; +esac + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; #( + comeau) : + if ac_fn_c_compute_int "$LINENO" "__COMO_VERSION__%100" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_COMEAU unknown comeau compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__COMO_VERSION__/100)%10" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_COMEAU unknown comeau compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor" + ;; #( + kai) : + + if ac_fn_c_compute_int "$LINENO" "__KCC_VERSION%100" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_KAI unknown kay compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__KCC_VERSION/100)%10" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_KAI unknown kay compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__KCC_VERSION/1000)%10" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_KAI unknown kay compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + sgi) : + + + if ac_fn_c_compute_int "$LINENO" " + #if defined(_COMPILER_VERSION) + _COMPILER_VERSION + #else + _SGI_COMPILER_VERSION + #endif + %10" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SGI unknown SGI compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(_COMPILER_VERSION) + _COMPILER_VERSION + #else + _SGI_COMPILER_VERSION + #endif + /10)%10" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SGI unknown SGI compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "( + #if defined(_COMPILER_VERSION) + _COMPILER_VERSION + #else + _SGI_COMPILER_VERSION + #endif + /100)%10" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_SGI unknown SGI compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + microsoft) : + + if ac_fn_c_compute_int "$LINENO" "_MSC_VER%100" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_MICROSOFT unknown microsoft compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(_MSC_VER/100)%100" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_MICROSOFT unknown microsoft compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + _ax_c_compiler_version_patch=0 + _ax_c_compiler_version_build=0 + # special case for version 6 + if test "X$_ax_c_compiler_version_major" = "X12"; then : + if ac_fn_c_compute_int "$LINENO" "_MSC_FULL_VER%1000" "_ax_c_compiler_version_patch" ""; then : + +else + _ax_c_compiler_version_patch=0 +fi + +fi + # for version 7 + if test "X$_ax_c_compiler_version_major" = "X13"; then : + if ac_fn_c_compute_int "$LINENO" "_MSC_FULL_VER%1000" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_MICROSOFT unknown microsoft compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + # for version > 8 + if test $_ax_c_compiler_version_major -ge 14; then : + if ac_fn_c_compute_int "$LINENO" "_MSC_FULL_VER%10000" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_MICROSOFT unknown microsoft compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + if test $_ax_c_compiler_version_major -ge 15; then : + if ac_fn_c_compute_int "$LINENO" "_MSC_BUILD" "_ax_c_compiler_version_build" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_MICROSOFT unknown microsoft compiler build version +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch.$_ax_c_compiler_version_build" + ;; #( + metrowerks) : + if ac_fn_c_compute_int "$LINENO" "__MWERKS__%0x100" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_METROWERKS unknown metrowerks compiler patch version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__MWERKS__/0x100)%0x10" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_METROWERKS unknown metrowerks compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__MWERKS__/0x1000)%0x10" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_METROWERKS unknown metrowerks compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + watcom) : + if ac_fn_c_compute_int "$LINENO" "__WATCOMC__%100" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_WATCOM unknown watcom compiler minor version +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "(__WATCOMC__/100)%100" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_WATCOM unknown watcom compiler major version +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor" + ;; #( + portland) : + + if ac_fn_c_compute_int "$LINENO" "__PGIC__" "_ax_c_compiler_version_major" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PORTLAND unknown pgi major +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__PGIC_MINOR__" "_ax_c_compiler_version_minor" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PORTLAND unknown pgi minor +See \`config.log' for more details" "$LINENO" 5; } +fi + + if ac_fn_c_compute_int "$LINENO" "__PGIC_PATCHLEVEL__" "_ax_c_compiler_version_patch" ""; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "_AX_COMPILER_VERSION_PORTLAND unknown pgi patch level +See \`config.log' for more details" "$LINENO" 5; } +fi + + ax_cv_c_compiler_version="$_ax_c_compiler_version_major.$_ax_c_compiler_version_minor.$_ax_c_compiler_version_patch" + ;; #( + tcc) : + + ax_cv_c_compiler_version=`tcc -v | $SED 's/^[ ]*tcc[ ]\+version[ ]\+\([0-9.]\+\).*/\1/g'` + ;; #( + *) : + ax_cv_c_compiler_version="" ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_version" >&5 +$as_echo "$ax_cv_c_compiler_version" >&6; } + + GCC_VERSION=$ax_cv_c_compiler_version + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo " $GCC_VERSION " | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "6.0" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + DEBUG_FLAGS=" $DEBUG_FLAGS -D_GLIBCXX_ASSERTIONS" + else DUMMY=" " + fi + + + # Strip optimisation flags from debug build + #-- + + CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9s]*//g'` + CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/-O[0-9s]*//g'` + + CFLAGS="$CFLAGS -g" + CXXFLAGS="$CXXFLAGS -g" + #-- + + #Check for UbSan availability + #-- + if test x"${enable_no_ubsan}" == x"no" ; then + + USE_UBSAN="no" + + case "${host_os}" in + *inux*) + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo " $GCC_VERSION " | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "4.9" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + USE_UBSAN="yes" + else USE_UBSAN="no" + fi + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo " $GCC_VERSION " | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "6.0" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + USE_UBSAN_GCC6="yes" + else USE_UBSAN_GCC6="no" + fi + + ;; + esac + + if test x"$USE_UBSAN" == x"yes" ; then + CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return -fsanitize=integer-divide-by-zero -fsanitize=vla-bound -fsanitize=null -fsanitize=signed-integer-overflow" + CXXFLAGS="$CXXFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return -fsanitize=integer-divide-by-zero -fsanitize=vla-bound -fsanitize=null -fsanitize=signed-integer-overflow" + LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return " + { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"Enabling Gcc-UbSan\"" >&5 +$as_echo "\"Enabling Gcc-UbSan\"" >&6; }; + fi + +# Disabled until we improve our compiler detection (clang) +# if test x"$USE_UBSAN_GCC6" == x"yes" ; then +# CFLAGS="$CFLAGS -fsanitize=bounds-strict" +# CXXFLAGS="$CXXFLAGS -fsanitize=bounds-strict" +# LDFLAGS="$LDFLAGS -fsanitize=bounds-strict" +# AC_MSG_RESULT(["Enabling More Gcc-UbSan (gcc6)"]); +# fi fi #-- @@ -8700,7 +9775,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by 3Depict $as_me 0.0.19, which was +This file was extended by 3Depict $as_me 0.0.20, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8766,7 +9841,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -3Depict config.status 0.0.19 +3Depict config.status 0.0.20 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru 3depict-0.0.19-1/configure.ac 3depict-0.0.20/configure.ac --- 3depict-0.0.19-1/configure.ac 2016-05-19 00:06:21.000000000 +0000 +++ 3depict-0.0.20/configure.ac 2017-02-05 00:09:42.000000000 +0000 @@ -1,4 +1,4 @@ -AC_INIT([3Depict], [0.0.19]) +AC_INIT([3Depict], [0.0.20]) AM_INIT_AUTOMAKE([foreign subdir-objects]) AC_PROG_CXX AC_PROG_CC @@ -319,7 +319,7 @@ # mathgl2.x uses mgl_cf.h for c functions. AC_LANG_PUSH([C++]) AC_DEFINE(USE_MGL2, 1 , ["Enable mgl2 support"]) -AC_CHECK_HEADER("mgl2/mgl_cf.h",[],[AC_MSG_ERROR(["mgl2 specified, but header mgl2/mgl_cf.h not found"])],[]) +#AC_CHECK_HEADER("mgl2/mgl_cf.h",[],[AC_MSG_ERROR(["mgl2 specified, but header mgl2/mgl_cf.h not found"])],[]) AC_LANG_POP([C++]) @@ -416,20 +416,19 @@ if test x"$enable_debug_checks" == x"yes" ; then - if test x"$enable_openmp_parallel" != x"" ; - then - #Note that GLIBCXX_DEBUG cannot exist with GLIBCXX_PARALLEL - DEBUG_FLAGS="-DDEBUG" + DEBUG_FLAGS="-DDEBUG" + AC_SUBST(DEBUG_FLAGS) - else - DEBUG_FLAGS="-DDEBUG -D_GLIBCXX_DEBUG" - fi + if test x"$GCC" == x"yes" ; then - AC_SUBST(DEBUG_FLAGS) + AX_COMPILER_VERSION + GCC_VERSION=$ax_cv_c_compiler_version - if test x"$GCC" = x"yes" ; then - # Strip optimsation flags from debug build + AX_COMPARE_VERSION( [ $GCC_VERSION ], ge, 6.0, + [ DEBUG_FLAGS=" $DEBUG_FLAGS -D_GLIBCXX_ASSERTIONS" ] , [ DUMMY=" " ]) + + # Strip optimisation flags from debug build #-- changequote({,}) CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9s]*//g'` @@ -447,10 +446,10 @@ case "${host_os}" in *inux*) - GCC_VER=`gcc --version | head -n 1 | awk '{ print $(NF)}'` - AX_COMPARE_VERSION( [ $GCC_VER ], ge, 4.9, + + AX_COMPARE_VERSION( [ $GCC_VERSION ], ge, 4.9, [ USE_UBSAN="yes" ] , [ USE_UBSAN="no" ]) - AX_COMPARE_VERSION( [ $GCC_VER ], ge, 6.0, + AX_COMPARE_VERSION( [ $GCC_VERSION ], ge, 6.0, [ USE_UBSAN_GCC6="yes" ] , [ USE_UBSAN_GCC6="no" ]) ;; esac @@ -461,13 +460,14 @@ LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined -fsanitize=return " AC_MSG_RESULT(["Enabling Gcc-UbSan"]); fi - - if test x"$USE_UBSAN_GCC6" == x"yes" ; then - CFLAGS="$CFLAGS -fsanitize=bounds-strict" - CXXFLAGS="$CXXFLAGS -fsanitize=bounds-strict" - LDFLAGS="$LDFLAGS -fsanitize=bounds-strict" - AC_MSG_RESULT(["Enabling More Gcc-UbSan (gcc6)"]); - fi + +# Disabled until we improve our compiler detection (clang) +# if test x"$USE_UBSAN_GCC6" == x"yes" ; then +# CFLAGS="$CFLAGS -fsanitize=bounds-strict" +# CXXFLAGS="$CXXFLAGS -fsanitize=bounds-strict" +# LDFLAGS="$LDFLAGS -fsanitize=bounds-strict" +# AC_MSG_RESULT(["Enabling More Gcc-UbSan (gcc6)"]); +# fi fi #-- diff -Nru 3depict-0.0.19-1/data/startup-tips.txt 3depict-0.0.20/data/startup-tips.txt --- 3depict-0.0.19-1/data/startup-tips.txt 2016-05-31 01:15:40.000000000 +0000 +++ 3depict-0.0.20/data/startup-tips.txt 2017-01-21 11:37:29.000000000 +0000 @@ -2,23 +2,28 @@ # each tip must be of the form _("some tip") # wx docs say : blank lines, and lines starting with # are skipped -_("You can reset the main view by tapping the space bar. Hold down modifier keys like shift,ctrl to change the axis. Double tap to switch which axis to look down") +_("You can reset the main view by tapping the space bar. Hold down modifier keys like shift,ctrl to change the axis. Double tap to switch which axis to look the other way (+ve or -ve direction)") _("You can delete filters from the tree by selecting them, then tapping delete?") _("Multiple languages are supported? You can translate the program into your own language at https://www.transifex.com/projects/p/3depict/") -_("Package files can be easily shared to allow others to view your analysis, using the File->Export->Package menu item") +_("Package files can be easily shared to allow others to view your analysis, using the File->Export->Package menu item. This will automatically import all referenced files (eg pos/rng files) into a single shareable folder") _("You can export plots to SVG \"Vector\" format, for easier editing - edit your plots in inkscape!") _("You can access the manual from the Help menu") _("You can change filter defaults using the Edit->Preferences menu item") _("You can overlay multiple plots at once, by selecting more than on plot at a time (e.g. using Ctrl)") _("Calculations are much faster (more than linear speedup) when working with smaller datasets - try sampling, or clipping out a small region to work faster, then remove the sampling when you are ready") _("You can abort most calculations either by pressing Escape (OSX/Linux), or by using the Abort button (Windows)") -_("That anyone can contribute to improving this program, even without knowing about computer programming?") -_("You can load more than one file at a time, then either operate on the separately, or together") +_("That anyone can contribute to improving this program, even without knowing about computer programming? Reporting bugs helps us to prioritise our work, and directs us to fix real problems for all users") +_("You can load more than one file at a time, then either operate on them separately, or together") _("You can have more than one range file for different parts of your dataset") _("Cameras can be saved and retrieved whenever you like, using the camera tab") _("Subsections of the filter tree can be saved to the \"Stashed filters\" drop-down") _("The console tab along the bottom often shows useful messages from filters. When new messages appear, a small symbol is shown on the tab") _("The raw data used for any plot can be accessed from the \"Raw\" tab on the bottom panel") _("You can ask questions about the program, or using it on your data on our forums (https://sourceforge.net/p/threedepict/discussion/general/)") -_("By creating a camera, you can switch between orthographic and perspective views") +_("By creating a camera, you can switch between orthographic (parallel) and perspective views") _("You can open multiple files at once, and get a side-by-side view by translating (shifting) one of the datasets to one side") +_("From version 0.0.20, vector values in filter properties (e.g. \"(1,0,0)\") can be specified using ISO 31-11 spherical coordinates using the following notation , with angles in degrees") +_("You can change the behavior of filter dragging by holding Ctrl (mac: cmd) or Shift whilst dragging? This switches between move, copy and \"splice"\ operations) +_("We like to know where we are being helpful? Please consider writing the program and version number in any work you might publish - whether in print or online. Alternatively, link to our website, or write to us to let us know we helped!") +_("You can merge files by placing two \"Pos Data\" filters in series, then saving the result?") + diff -Nru 3depict-0.0.19-1/debian/changelog 3depict-0.0.20/debian/changelog --- 3depict-0.0.19-1/debian/changelog 2016-07-25 21:11:47.000000000 +0000 +++ 3depict-0.0.20/debian/changelog 2017-02-09 00:01:03.000000000 +0000 @@ -1,15 +1,23 @@ -3depict (0.0.19-1-1ubuntu1~trusty) trusty; urgency=low +3depict (0.0.20-1ubuntu1~trusty) trusty; urgency=medium - * Update to 0.0.19 + * Update to upstream 0.0.18 - -- tehuser (PPA key) Sun, 24 Jul 2016 14:44:00 +0100 + -- tehuser Sun, 03 May 2015 14:44:00 +0100 -3depict (0.0.18-3) unstable; urgency=low +3depict (0.0.20-1) UNRELEASED; urgency=medium + * Update to upstream 0.0.20 + + -- D Haley Sun, 05 Feb 2017 14:01:12 +0100 + +3depict (0.0.19-1) unstable; urgency=low + + * Update to upstream 0.0.19 (Closes: #831200) + * Update GSL build dependency (Closes: #807232) * Minor lintian fixes to copyright, menu * Fix build with autoconf != autoconf-1.14 - -- D Haley Mon, 08 Feb 2016 01:36:28 +0000 + -- D Haley Thu, 04 Aug 2016 00:21:09 +0200 3depict (0.0.18-2) unstable; urgency=medium diff -Nru 3depict-0.0.19-1/debian/control 3depict-0.0.20/debian/control --- 3depict-0.0.19-1/debian/control 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/control 2017-02-06 01:15:10.000000000 +0000 @@ -4,20 +4,21 @@ Section: science Priority: optional Build-Depends: debhelper (>= 9), - dh-autoreconf (>=9), + dh-autoreconf, dpkg-dev (>= 1.16.1~), libgl1-mesa-dev | libgl-dev, libpng-dev | libpng15-dev, libqhull-dev, libwxgtk3.0-dev, + libgsl-dev, libftgl-dev, libxml2-dev, - libmgl-dev (>= 2.3.4), + libmgl-dev (>= 2.0), libvigraimpex-dev, automake, - autotools-dev, - pkg-config -Standards-Version: 3.9.6 + autotools-dev, + pkg-config +Standards-Version: 3.9.8 Vcs-Browser: https://anonscm.debian.org/cgit/debian-science/packages/3depict.git Vcs-Git: git://anonscm.debian.org/debian-science/packages/3depict.git Homepage: http://threedepict.sourceforge.net/index.html diff -Nru 3depict-0.0.19-1/debian/copyright 3depict-0.0.20/debian/copyright --- 3depict-0.0.19-1/debian/copyright 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/copyright 2017-02-05 23:41:54.000000000 +0000 @@ -19,10 +19,6 @@ contained here in consideration of your acceptance of such terms and conditions. -Files: debian/* -Copyright: Copyright 2013, D Haley -License: GPL-3+ - Files:data/textures/*rrow*png data/textures/*rrow*svg data/textures/tex-source/*rrow*svg data/textures/*enlarge*png data/textures/tex-source/*enlarge.svg Copyright: Copyright 2006, Everaldo Coelho Source: https://commons.wikimedia.org/wiki/Crystal_clear @@ -51,7 +47,7 @@ Copyright: Copyright 2008, Metamolecular Source: http://metamolecular.com License: expat - On Debian systems the full text of th expat license can be found in the + On Debian systems the full text of the expat license can be found in the `/usr/share/common-licenses/expat' file. License: GPL-3+ diff -Nru 3depict-0.0.19-1/debian/patches/configure-force-ftgl 3depict-0.0.20/debian/patches/configure-force-ftgl --- 3depict-0.0.19-1/debian/patches/configure-force-ftgl 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/patches/configure-force-ftgl 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Index: 3depict-0.0.19/configure.ac -=================================================================== ---- 3depict-0.0.19.orig/configure.ac -+++ 3depict-0.0.19/configure.ac -@@ -176,7 +176,9 @@ dnl ---------- - - #Check for FTGL using custom script. - dnl ---------- --AX_CHECK_FTGL() #Not doing anything??? -+#AX_CHECK_FTGL() #Not doing anything??? -+FTGL_CFLAGS="" -+FTGL_LIBS="-lftgl" - - AC_SUBST(FTGL_CFLAGS) - AC_SUBST(FTGL_LIBS) diff -Nru 3depict-0.0.19-1/debian/patches/diff-upstream-0.0.18_to_212d6e1e6b14 3depict-0.0.20/debian/patches/diff-upstream-0.0.18_to_212d6e1e6b14 --- 3depict-0.0.19-1/debian/patches/diff-upstream-0.0.18_to_212d6e1e6b14 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/patches/diff-upstream-0.0.18_to_212d6e1e6b14 1970-01-01 00:00:00.000000000 +0000 @@ -1,1490 +0,0 @@ -diff -ruh ./src/3Depict.cpp ./3Depict.cpp ---- ./src/3Depict.cpp 2016-02-08 02:38:00.000000000 +0100 -+++ ./src/3Depict.cpp 2016-02-08 02:41:11.805762472 +0100 -@@ -21,6 +21,9 @@ - #include - #include - #include -+#ifndef DEBUG -+#include -+#endif - - #ifdef __APPLE__ - #include "CoreFoundation/CoreFoundation.h" -@@ -39,11 +42,12 @@ - - class threeDepictApp: public wxApp { - private: --#ifndef DEBUG -- //instance of this class suppresses internal wx error dialogs. -- // these are a nuisance in release code, as recovered errors often annoy the user -- wxLogNull nullifyLogs; --#endif -+ -+ -+ void redirectWxLogging(); -+ -+ std::ofstream debugLogStream; -+ - - MainWindowFrame* MainFrame ; - wxArrayString commandLineFiles; -@@ -101,11 +105,29 @@ - { - MainFrame=0;usrLocale=0; - dontLoad=false; --#ifndef DEBUG -+ - //Wx 2.9 and up now has assertions auto-enabled. - //Disable for release builds -+#ifndef DEBUG - wxSetAssertHandler(NULL); - #endif -+ redirectWxLogging(); -+} -+ -+void threeDepictApp::redirectWxLogging() -+{ -+ //Disable user visible logging on the main thread, this can throw up "error dialogs" -+ // to the user that seem to be false positives, such as "Error: Sucess" type messages -+ // ihstead try first to log to file. If that fails, just disable it -+ wxStandardPaths &paths = wxStandardPaths::Get(); -+ wxString filePath = paths.GetDocumentsDir(); -+ filePath+=("/.")+string(PROGRAM_NAME) + string("log.txt"); -+ debugLogStream.open(filePath.c_str()); -+ -+ if(!debugLogStream) -+ wxLog::EnableLogging(false); -+ else -+ wxLog::SetActiveTarget(new wxLogStream(&debugLogStream)); - } - - int threeDepictApp::OnExit() -diff -ruh ./src/backend/APT/APTFileIO.cpp ./backend/APT/APTFileIO.cpp ---- ./src/backend/APT/APTFileIO.cpp 2016-02-08 01:39:07.246999770 +0100 -+++ ./src/backend/APT/APTFileIO.cpp 2016-02-08 02:41:11.833762535 +0100 -@@ -473,7 +473,7 @@ - //we define this as the split value being able to generate - //1) Enough data to make interpretable columns - //2) Enough columns that can be interpreted. -- while(!CFile.eof() && curPos < maxPos) -+ while(CFile.good() && !CFile.eof() && curPos < maxPos) - { - string s; - curPos = CFile.tellg(); -@@ -505,7 +505,7 @@ - } - - //could not find any data.. only header. -- if(CFile.eof() || curPos >=maxPos) -+ if(!CFile.good() || CFile.eof() || curPos >=maxPos) - return TEXT_ERR_ONLY_HEADER; - - -@@ -526,7 +526,7 @@ - newLinePositions.push_back(curPos); - bool seenNumeric=false; - buffer = new char[BUFFER_SIZE]; -- while(!CFile.eof() && curPos < maxPos) -+ while(CFile.good() && !CFile.eof() && curPos < maxPos) - { - size_t bytesToRead; - -diff -ruh ./src/backend/APT/APTRanges.cpp ./backend/APT/APTRanges.cpp ---- ./src/backend/APT/APTRanges.cpp 2016-02-08 01:39:07.246999770 +0100 -+++ ./src/backend/APT/APTRanges.cpp 2016-02-08 02:41:11.637762095 +0100 -@@ -1135,10 +1135,8 @@ - - //Now, spin forwards until we either hit EOF or our double-dash marker - -- while(!f.eof()) -+ while(!getline(f,tmpStr)) - { -- getline(f,tmpStr); -- - if(tmpStr.size() > 2 && - tmpStr[0] == '-' && tmpStr[1] == '-') - { -@@ -1149,7 +1147,7 @@ - } - } - -- if(f.eof()) -+ if(!f.good()) - { - //we did not see a double-dash, must be a vanilla ORNL file - typeStatus[RANGE_FORMAT_DBL_ORNL]=STATUS_IS_NOT; -@@ -1505,6 +1503,7 @@ - bool beyondRanges=false; - bool haveNumRanges=false; - bool haveNameBlock=false; -+ bool haveSeenRevHeader=false; - vector strVec; - - //Read file until we get beyond the range length -@@ -1527,6 +1526,13 @@ - if(!s.size()) - continue; - -+ //If we have -+ if(!haveSeenRevHeader && (s== "Rev_2.0")) -+ { -+ haveSeenRevHeader=true; -+ continue; -+ } -+ - //Try different delimiters to split string - splitStrsRef(s.c_str(),"\t ",strVec); - -diff -ruh ./src/backend/filters/algorithms/mass.cpp ./backend/filters/algorithms/mass.cpp ---- ./src/backend/filters/algorithms/mass.cpp 2016-02-08 01:39:07.250999771 +0100 -+++ ./src/backend/filters/algorithms/mass.cpp 2016-02-08 02:41:11.645762113 +0100 -@@ -87,19 +87,18 @@ - const unsigned int MIN_REQUIRED_AVG_COUNTS=10; - const unsigned int MIN_REQUIRED_BINS=10; - -- //CHECKME : The number of bins is the same in TOF as well as in -- // m/c space. -- size_t nBins = (backParams.massEnd - backParams.massStart) / backParams.binWidth; -- float filterStep = (sqrt(backParams.massEnd) - sqrt(backParams.massStart) )/ nBins; -+ size_t nBinsTof = (sqrt(backParams.massEnd) - sqrt(backParams.massStart)) / backParams.binWidth; -+ float filterStep = (sqrt(backParams.massEnd) - sqrt(backParams.massStart) )/ nBinsTof; - - //we cannot perform a test with fewer than this number of bins -- if ( nBins < MIN_REQUIRED_BINS) -+ if ( nBinsTof < MIN_REQUIRED_BINS) - return BACKGROUND_PARAMS::FIT_FAIL_MIN_REQ_BINS; - -- float averageCounts = sqrtFiltMass.size()/ (float)nBins; -+ float averageCounts = sqrtFiltMass.size()/ (float)nBinsTof; - if( averageCounts < MIN_REQUIRED_AVG_COUNTS) - return BACKGROUND_PARAMS::FIT_FAIL_AVG_COUNTS; - -+ //Check that the TOF-space histogram is gaussian - vector histogram; - makeHistogram(sqrtFiltMass,sqrt(backParams.massStart), - sqrt(backParams.massEnd), filterStep,histogram); -@@ -120,14 +119,34 @@ - if(andersonStat > STATISTIC_THRESHOLD || undefCount == histogram.size()) - return BACKGROUND_PARAMS::FIT_FAIL_DATA_NON_GAUSSIAN; - -- //Intensity PER AMU -- //backgroundIntensity= meanVal/filterStep; - //Intensity PER BIN in TOF space - backParams.intensity= meanVal; - - return 0; - } - -+ -+//Start and end mass, and step size (to get bin count). -+// tofBackIntensity is the intensity level per unit time in the background, as obtained by doFitBackground -+// the histogram is -+void createMassBackground(float massStart, float massEnd, unsigned int nBinsMass, -+ float tofBackIntensity, vector &histogram) -+{ -+ const float MC_BIN_STEP = (massEnd-massStart)/nBinsMass; -+ -+ //compute fitted value analytically -+ histogram.resize(nBinsMass); -+ for(size_t ui=0;ui rawData; - ionData->data.resize(NUM_IONS); -@@ -194,20 +212,7 @@ - rawData[ui] = simTof; - } - -- const float BIN_STEP=0.1f; -- vector histogramRes; -- makeHistogram(rawData,TOF_LIMIT[0],TOF_LIMIT[1], -- BIN_STEP,histogramRes); -- //--- - -- //Find the mean and std. deviation for the tof histogram -- float meanV,stdV; -- meanAndStdev(histogramRes,meanV,stdV); -- -- //check that the TOF histogram's mean matches the expected value -- const float EXPECTED_MEAN = NUM_IONS*BIN_STEP/(TOF_LIMIT[1] - TOF_LIMIT[0]); -- TEST(meanV > 0.95*EXPECTED_MEAN && -- meanV < EXPECTED_MEAN*1.15,"expected mean should fall (well) within anticipated bounds, but does not"); - - - //Now perform the fit in m/c space, and after, check that it matches the anticipated m/c histogram. -@@ -217,41 +222,39 @@ - vector massData; - massData.resize(NUM_IONS); - for(size_t ui=0;ui massHist; - - //Recompute the bin step parameter, as the stepping in m/c space to yield - // the same number of bins will e radially different -- const float NBINS = ( TOF_LIMIT[1] - TOF_LIMIT[0] )/BIN_STEP; -- const float MC_BIN_STEP = (sqrt(TOF_LIMIT[1])-sqrt(TOF_LIMIT[0]))/NBINS; -- makeHistogram(massData,sqrt(TOF_LIMIT[0]),sqrt(TOF_LIMIT[1]),MC_BIN_STEP,massHist); -+ const float NBINS_TOF = 20; -+ const float NBINS_MASS= NBINS_TOF; -+ const float MASS_LIMIT[2] = {TOF_LIMIT[0]*TOF_LIMIT[0], TOF_LIMIT[1]*TOF_LIMIT[1]}; -+ -+ -+ //time-space intensity per unit time -+ const float TOF_MEAN_INT= NUM_IONS/(TOF_LIMIT[1] - TOF_LIMIT[0]); -+ -+ const float MC_BIN_STEP = (MASS_LIMIT[1]-MASS_LIMIT[0])/NBINS_MASS; -+ makeHistogram(massData,MASS_LIMIT[0],MASS_LIMIT[1],MC_BIN_STEP,massHist); - - //compute fitted value analytically - vector fittedMassHist; -- fittedMassHist.resize(NBINS); -- for(size_t ui=0;ui theHull; -- if(computeConvexHull(points,progress,wantAbort,theHull,false)) -+ if(computeConvexHull(points,progress,wantAbort,theHull,false,false)) - return 2; - - Point3D midPoint(0,0,0); -@@ -1044,5 +1044,14 @@ - - } - -+bool qhullTest() -+{ -+#if defined(__WIN64) -+ //If using a cross-compile (at least) -+ // qhull under win64 must use long long, or we get random crashes -+ // The definition is set in qhull/mem.h -+ COMPILE_ASSERT(sizeof(ptr_intT) == sizeof(long long)) -+#endif -+} - - -diff -ruh ./src/backend/filters/dataLoad.cpp ./backend/filters/dataLoad.cpp ---- ./src/backend/filters/dataLoad.cpp 2016-02-08 01:39:07.258999772 +0100 -+++ ./src/backend/filters/dataLoad.cpp 2016-02-08 02:41:11.645762113 +0100 -@@ -67,7 +67,7 @@ - NTRANS("Text Data"), - NTRANS("ATO Data"), - }; --const char *DEFAULT_LABEL="Mass-to-Charge (amu/e)"; -+const char *DEFAULT_LABEL="Mass-to-Charge (Da/e)"; - - - -diff -ruh ./src/backend/filters/geometryHelpers.cpp ./backend/filters/geometryHelpers.cpp ---- ./src/backend/filters/geometryHelpers.cpp 2016-02-08 01:39:07.258999772 +0100 -+++ ./src/backend/filters/geometryHelpers.cpp 2016-02-08 02:41:11.669762167 +0100 -@@ -455,18 +455,21 @@ - //rotate ion position into cylindrical coordinates - quat_rot_apply_quat(&p,&qA); - -+ fSqrRad=p.fx*p.fx + p.fy*p.fy; - //Check inside upper and lower bound of cylinder - // and check inside cylinder radius -- if(!(p.fz < fA && p.fz > -fA && -- p.fx*p.fx+p.fy*p.fy < fB)) -+ if(!( (p.fz < fA && p.fz > -fA ) && -+ fSqrRad < fB)) - return (unsigned int)-1; - -- fSqrRad=ptmp[0]*ptmp[0] + ptmp[1]*ptmp[1]; -- - } - -+ unsigned int mapPos; -+ mapPos=(unsigned int)(fSqrRad/fB*(float)mapMax); -+ ASSERT(mapPos < mapMax); -+ - //Area is constant in square space -- return (unsigned int)(fSqrRad/fB*(float)mapMax); -+ return mapPos; - - } - -@@ -523,8 +526,11 @@ - ASSERT(!invertedClip); - ASSERT(mapFunc); - ASSERT(mapMax); -- //return the 1D mapping for the ion -- return (this->*mapFunc)(ionIn.getPosRef()); -+ //return the 1D mapping for the ion, or -1 for not mappable -+ unsigned int mappingPos; -+ mappingPos=(this->*mapFunc)(ionIn.getPosRef()); -+ ASSERT(mappingPos < mapMax || mappingPos == (unsigned int) -1); -+ return mappingPos; - } - - void CropHelper::setFilterMode(size_t filterMode) -diff -ruh ./src/backend/filters/rangeFile.cpp ./backend/filters/rangeFile.cpp ---- ./src/backend/filters/rangeFile.cpp 2016-02-08 01:39:07.258999772 +0100 -+++ ./src/backend/filters/rangeFile.cpp 2016-02-08 02:41:11.673762176 +0100 -@@ -116,6 +116,11 @@ - return 0; - } - -+ progress.filterProgress=0; -+ progress.stepName=TRANS("Ranging"); -+ progress.step=1; -+ progress.maxStep=1; -+ - - ASSERT(enabledRanges.size() == rng.getNumRanges()); - ASSERT(enabledIons.size() == rng.getNumIons()); -@@ -148,11 +153,6 @@ - sameSize=true; - - -- progress.step=1; -- progress.filterProgress=0; -- progress.stepName=TRANS("Pre-Allocate"); -- progress.maxStep=2; -- - vector dSizes; - dSizes.resize(d.size(),0); - size_t totalSize=numElements(dataIn); -@@ -270,7 +270,7 @@ - { - //slightly over-allocate to allow for any variance - for(size_t ui=0;uidata.reserve(dSizes[ui]*1.f*RANGE_ALLOC_STEP+10); -+ d[ui]->data.reserve(dSizes[ui]*1.05f*RANGE_ALLOC_STEP+10); - } - catch(std::bad_alloc) - { -@@ -282,12 +282,6 @@ - dSizes.clear(); - //=================================== - -- //Update progress info -- progress.step=2; -- progress.filterProgress=0; -- progress.stepName=TRANS("Range"); -- -- - - - //Step 2: Go through each data stream, if it is an ion stream, range it. -diff -ruh ./src/backend/filters/transform.cpp ./backend/filters/transform.cpp ---- ./src/backend/filters/transform.cpp 2016-02-08 01:39:07.262999773 +0100 -+++ ./src/backend/filters/transform.cpp 2016-02-08 02:41:11.681762194 +0100 -@@ -277,9 +277,10 @@ - DrawStreamData *d=makeMarkerSphere(s); - if(s) - devices.push_back(s); -- -- cacheAsNeeded(d); -- -+ else -+ { -+ cacheAsNeeded(d); -+ } - getOut.push_back(d); - } - -diff -ruh ./src/backend/state.cpp ./backend/state.cpp ---- ./src/backend/state.cpp 2016-02-08 01:39:07.266999774 +0100 -+++ ./src/backend/state.cpp 2016-02-08 02:41:11.689762212 +0100 -@@ -979,7 +979,10 @@ - ASSERT(offset < savedCameras.size()); - savedCameras.erase(savedCameras.begin()+offset); - if(activeCamera >=savedCameras.size()) -- activeCamera=0; -+ { -+ ASSERT(savedCameras.size()) -+ activeCamera=savedCameras.size()-1; -+ } - } - - void AnalysisState::addCamByClone(const Camera *c) -@@ -990,6 +993,8 @@ - - void AnalysisState::addCam(const std::string &camName, bool makeActive) - { -+ //Disallow unnamed cameras -+ ASSERT(camName.size()); - //Duplicate the current camera, and give it a new name - Camera *c=getCam(getActiveCam())->clone(); - c->setUserString(camName); -@@ -1169,7 +1174,22 @@ - setStateModifyLevel(STATE_MODIFIED_ANCILLARY); - stashedTrees.erase(stashedTrees.begin() + offset); - } -+ -+void AnalysisState::eraseStashes(std::vector &offsets) -+{ -+ std::sort(offsets.begin(),offsets.end()); -+ ASSERT(std::unique(offsets.begin(),offsets.end()) == offsets.end()); -+ - -+ -+ setStateModifyLevel(STATE_MODIFIED_ANCILLARY); -+ for(unsigned int ui=offsets.size();ui>0;) -+ { -+ ui--; -+ -+ stashedTrees.erase(stashedTrees.begin() + offsets[ui]); -+ } -+} - bool AnalysisState::hasStateOverrides() const - { - if(treeState.hasStateOverrides()) -diff -ruh ./src/backend/state.h ./backend/state.h ---- ./src/backend/state.h 2016-02-08 01:39:07.266999774 +0100 -+++ ./src/backend/state.h 2016-02-08 02:41:11.689762212 +0100 -@@ -368,6 +368,9 @@ - - //!Add a new camera to the scene - void addCam(const std::string &camName, bool makeActive=false); -+ -+ bool defaultCamActive() const { return activeCamera == 0;} -+ - //===== - - //Effect functions -@@ -417,8 +420,11 @@ - - //!Insert the given stash into the tree as a child of the given parent filter - void addStashedToFilters(const Filter *parentFilter, unsigned int stashOffset); -- //Remove the stash at the specified offset -+ //Remove the stash at the specified offset. Numbers will -+ // be reset, so previous offsets will no longer be valid - void eraseStash(size_t offset); -+ //Remove the given stashew at the specified offsets -+ void eraseStashes(std::vector &offset); - - //Return the number of stash elements - size_t getStashCount() const { return stashedTrees.size();} -diff -ruh ./src/backend/viscontrol.cpp ./backend/viscontrol.cpp ---- ./src/backend/viscontrol.cpp 2016-02-08 01:39:07.266999774 +0100 -+++ ./src/backend/viscontrol.cpp 2016-02-08 02:41:11.689762212 +0100 -@@ -670,7 +670,9 @@ - - void VisController::updateStashComboBox(wxComboBox *comboStash) const - { -- comboStash->Clear(); -+ //HACK: Calling ->Clear() under MSW causes a crash -+ while(comboStash->GetCount()) -+ comboStash->Delete(0); - - unsigned int nStashes = state.getStashCount(); - for(unsigned int ui=0;uiClear(); -+ //HACK: Calling ->Clear() under MSW causes a crash -+ while(comboCamera->GetCount()) -+ comboCamera->Delete(0); -+ - size_t nCams = state.getNumCams(); - //The start from 1 is a hack to avoid the unnamed camera - for(unsigned int ui=1;uiAppend(camName, - (wxClientData *)new wxListUint(ui)); -- //If this is the active cam (1) set the selection and (2) remember -- //the ID -+ //If this is the active cam (1) set the selection - if(ui == state.getActiveCam()) - comboCamera->SetSelection(ui-1); - } -diff -ruh ./src/common/assertion.h ./common/assertion.h ---- ./src/common/assertion.h 2016-02-08 01:39:07.266999774 +0100 -+++ ./src/common/assertion.h 2016-02-08 02:41:11.693762221 +0100 -@@ -66,6 +66,8 @@ - #define TEST(f,g) if(!(f)) { std::cerr << "Test fail :" << __FILE__ << ":" << __LINE__ << "\t"<< (g) << std::endl;return false;} - #endif - -+ #define TRACE(f) { timespec timeval; clock_gettime(CLOCK_MONOTONIC, &timeval); std::cerr << "<" << f <<">" __FILE__ << ":" << __LINE__ << " t: " << timeval.tv_sec << "." << timeval.tv_nsec/1000 << endl;} -+ - //A hack to generate compile time asserts (thanks Internet). - //This causes gcc to give "duplicate case value", if the predicate is false - #ifndef HAVE_CPP_1X -@@ -79,6 +81,7 @@ - #define COMPILE_ASSERT(f) - #define WARN(f,g) - #define TEST(f,g) -+ #define TRACE(f) - //Do we want to trap floating point exceptions - void trapfpe (bool doTrap=true); - -diff -ruh ./src/common/voxels.h ./common/voxels.h ---- ./src/common/voxels.h 2016-02-08 01:39:07.270999774 +0100 -+++ ./src/common/voxels.h 2016-02-08 02:41:11.705762248 +0100 -@@ -31,6 +31,9 @@ - #undef I - #undef Complex - #include -+#if defined(WIN32) || defined(WIN64) -+#include -+#endif - #include - #include - -@@ -1506,6 +1509,8 @@ - { - size_t slicePos; - slicePos=roundf(offset*binCount[normal]); -+ if(slicePos == binCount[normal]) -+ slicePos--; - getSlice(normal,slicePos,p); - break; - } -diff -ruh ./src/gl/drawables.cpp ./gl/drawables.cpp ---- ./src/gl/drawables.cpp 2016-02-08 01:39:07.270999774 +0100 -+++ ./src/gl/drawables.cpp 2016-02-08 02:41:11.709762257 +0100 -@@ -45,7 +45,6 @@ - unsigned int DrawableObj::winX; - unsigned int DrawableObj::winY; - --DrawTexturedQuad DrawPointLegendOverlay::dQuad; - bool DrawPointLegendOverlay::quadSet=false; - //== - -@@ -182,8 +181,8 @@ - { - //TODO: Could speedup with LINE_STRIP/LOOP. This is - //not a bottleneck atm though. -+ glColor4f(r,g,b,a); - glBegin(GL_LINES); -- glColor4f(r,g,b,a); - //Bottom corner out (three lines from corner) - glVertex3f(pMin[0],pMin[1],pMin[2]); - glVertex3f(pMax[0],pMin[1],pMin[2]); -@@ -725,6 +724,21 @@ - gluDeleteQuadric(q); - } - -+DrawableObj *DrawSphere::clone() const -+{ -+ DrawSphere *d = new DrawSphere(); -+ d->r=r; -+ d->g=g; -+ d->b=b; -+ d->a=a; -+ d->origin=origin; -+ d->radius=radius; -+ d->latSegments=latSegments; -+ d->longSegments=longSegments; -+ -+ d->q=gluNewQuadric(); -+ return d; -+} - - void DrawSphere::getBoundingBox(BoundCube &b) const - { -@@ -1858,6 +1872,8 @@ - } - - -+ float visGrey=getHighContrastValue(); -+ - //Draw the completed Steps - float thetaPerStep = thetaPerFilter/maxStep; - for(size_t ui=1;ui &r, - const vector &g, - const vector &b) -@@ -2237,45 +2260,6 @@ - - std::string tmpStr =getDefaultFontFile(); - font = new FTGLPolygonFont(tmpStr.c_str()); -- -- //check to see if we need to init the texture quad -- if(!quadSet && texPool) -- { -- -- dQuad.setUseColouring(false); -- -- //Create a circular texture -- const unsigned int N_CHANNELS=4; -- unsigned int LEG_TEX_SIZE = 256; -- unsigned char colourWhite[N_CHANNELS]= { 255,255,255,255 }; -- unsigned char colourBlack[N_CHANNELS]= { 0,0,0,0 }; -- -- //TODO: Convert to single channel texture, to save space? -- // DrawQuad does not support single channel at this time -- dQuad.resize(LEG_TEX_SIZE,LEG_TEX_SIZE,N_CHANNELS); -- const float HALF_CIRCLE_R2 = 0.25; -- #pragma omp parallel for -- for(unsigned int nX=0;nXv[0],f->v[1],f->v[2]); -- dQuad.draw(); -+ dCirc.setColour(f->v[0],f->v[1],f->v[2]); -+ dCirc.draw(); - - - //-- -@@ -2369,7 +2351,6 @@ - curX+=maxTextWidth + size; - curY=position[1] + 0.5*delta; - } -- glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - - void DrawPointLegendOverlay::addItem(const std::string &s, float r, float g, float b) -@@ -2863,3 +2844,76 @@ - b.setInvalid(); - } - -+Draw2DCircle::Draw2DCircle() -+{ -+ angularStep = 2.0f*M_PI/180.0f; -+ filled=true; -+} -+ -+void Draw2DCircle::draw() const -+{ -+ -+ float nSteps = 2.0* M_PI/angularStep; -+ WARN(nSteps > 1,"Draw2D Circle, too few steps"); -+ glColor4f(r,g,b,1.0f); -+ -+ if(filled) -+ { -+ glBegin(GL_TRIANGLE_FAN); -+ //Central vertex -+ glVertex2fv(centre); -+ -+ //vertices from [0,2PI) -+ for(unsigned int ui=0;uiBeginBatch(); - if(animationGrid->GetNumberRows()) - animationGrid->DeleteRows(0,animationGrid->GetNumberRows()); -- animationGrid->EndBatch(); - - - animationGrid->AppendRows(propertyAnimator.getNumProps()); -@@ -441,6 +440,8 @@ - animationGrid->SetCellValue(ui,CELL_ENDFRAME, (str)); - } - -+ animationGrid->EndBatch(); -+ - //Check for conflicting rows in the animation dialog, - // and highlight them in colour - set conflictRows; -@@ -641,12 +642,14 @@ - - void ExportAnimationDialog::OnFilterGridCellSelected(wxPropertyGridEvent &event) - { -- event.Veto(); - - wxTreeItemId tId=filterTreeCtrl->GetSelection();; - - if(tId ==filterTreeCtrl->GetRootItem() || !tId.IsOk()) -+ { -+ event.Veto(); - return; -+ } - - //Get the filter ID value - size_t filterId; -@@ -859,6 +862,8 @@ - ASSERT(false); // that should cover all data types... - } - -+ event.Veto(); -+ - //Add property to animator - propertyAnimator.addProp(frameProp); - -diff -ruh ./src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp ./gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp ---- ./src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp 2016-02-08 01:39:07.278999776 +0100 -+++ ./src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp 2016-02-08 02:41:11.705762248 +0100 -@@ -25,6 +25,10 @@ - #include - - -+//TODO: Currently we change the foreground text in a button to set colour. -+// better would be to use a "swatch" -+ -+ - using std::string; - - // begin wxGlade: ::extracode -@@ -195,16 +199,26 @@ - { - bool isOK=true; - isOK&=startFrameOK; -- isOK&=endFrameOK; -+ isOK&= (endFrameOK || transitionMode == TRANSITION_STEP) ; - -- //Ensure start frame is > end frame - if(isOK) - { -- isOK&=(startFrame end frame, -+ // if we are using interp mode -+ isOK&=(startFrameSetBackgroundColour(*wxCYAN); -- textFrameEnd->SetBackgroundColour(*wxCYAN); -+ if(transitionMode == TRANSITION_INTERP) -+ textFrameEnd->SetBackgroundColour(*wxCYAN); -+ else -+ textFrameEnd->SetBackgroundColour(wxNullColour); -+ - } - else - { -@@ -212,7 +226,8 @@ - textFrameEnd->SetBackgroundColour(wxNullColour); - } - } -- -+ -+ //Enable the OK button if all properties are set appropriately - buttonOK->Enable(isOK); - } - -diff -ruh ./src/gui/dialogs/StashDialog.cpp ./gui/dialogs/StashDialog.cpp ---- ./src/gui/dialogs/StashDialog.cpp 2016-02-08 01:39:07.274999775 +0100 -+++ ./src/gui/dialogs/StashDialog.cpp 2016-02-08 02:41:11.689762212 +0100 -@@ -164,12 +164,11 @@ - string strTmp; - pair stash; - long itemIdx; -- -+ visControl->state.copyStashedTree(ui,stash); - //First item is the stash name - itemIdx = listStashes->InsertItem(ui,stash.first); - - //Second column is num filters -- visControl->state.copyStashedTree(ui,stash); - stream_cast(strTmp,stash.second.size()); - listStashes->SetItem(itemIdx,1,(strTmp)); - -@@ -329,6 +328,7 @@ - void StashDialog::OnBtnRemove(wxCommandEvent &event) - { - //Spin through the list, to find the selected items -+ vector itemsToRemove; - int item=-1; - for ( ;; ) - { -@@ -337,15 +337,12 @@ - wxLIST_STATE_SELECTED); - if ( item == -1 ) - break; -- -- visControl->state.eraseStash(listStashes->GetItemData(item)); -- updateList(); -- updateTree(); -- updateGrid(); -- -+ itemsToRemove.push_back(listStashes->GetItemData(item)); - } - -+ visControl->state.eraseStashes(itemsToRemove); - -+ ready(); - } - - void StashDialog::do_layout() -diff -ruh ./src/gui/glPane.cpp ./gui/glPane.cpp ---- ./src/gui/glPane.cpp 2016-02-08 01:39:07.278999776 +0100 -+++ ./src/gui/glPane.cpp 2016-02-08 02:41:11.721762284 +0100 -@@ -210,6 +210,13 @@ - wxPaintEvent ptEvent; - wxPostEvent(this,ptEvent); - -+#ifdef WIN32 -+ //Hack for windows. Does not redraw otherwise. -+ // Refresh and Update in tandom dont work. -+ Show(false); -+ Show(true); -+#endif -+ - } - - // some useful events to use -@@ -635,7 +642,7 @@ - } - break; - default: -- event.Skip(); -+ event.Skip(true); - } - } - -@@ -658,6 +665,7 @@ - if(event.ShiftDown()) - cameraMoveRate*=5; - -+ bool update=true; - switch(event.GetKeyCode()) - { - case '-': -@@ -687,10 +695,12 @@ - break; - } - default: -- event.Skip(); -+ event.Skip(true); -+ update=false; - } - -- Refresh(); -+ if(update) -+ Refresh(); - } - - -@@ -1051,10 +1061,11 @@ - free(imageBuffer); - - combineWxImage(*image,imageOverlay); -+ -+ //Free the tile buffer -+ trDelete(tr); - } - -- //Free the tile buffer -- trDelete(tr); - - //-------------- - bool isOK=image->SaveFile(filename,wxBITMAP_TYPE_PNG); -diff -ruh ./src/gui/mainFrame.cpp ./gui/mainFrame.cpp ---- ./src/gui/mainFrame.cpp 2016-02-08 01:39:07.282999776 +0100 -+++ ./src/gui/mainFrame.cpp 2016-02-08 02:41:11.805762472 +0100 -@@ -390,6 +390,7 @@ - verCheckThread=0; - refreshThread=0; - refreshControl=0; -+ ensureResultVisible=false; - lastProgressData.reset(); - - //Set up the program icon handler -@@ -662,7 +663,6 @@ - checkWeakRandom = new wxCheckBox(noteTools, ID_CHECK_WEAKRANDOM, TRANS("Fast and weak randomisation.")); - checkWeakRandom->SetValue(true); - checkLimitOutput = new wxCheckBox(noteTools, ID_CHECK_LIMIT_POINT_OUT, TRANS("Limit Output Pts")); -- // checkLimitOutput->SetValue((visControl.getIonDisplayLimit() !=0)); - std::string tmpStr; - // stream_cast(tmpStr,visControl.getIonDisplayLimit()); - textLimitOutput = new wxTextCtrl(noteTools, ID_TEXT_LIMIT_POINT_OUT, (tmpStr), -@@ -754,7 +754,16 @@ - initedOK=true; - - -- -+ // Set the limit value checkbox and text field with the -+ // value obtained from the configuration file -+ unsigned int ionLimit=visControl.getIonDisplayLimit(); -+ checkLimitOutput->SetValue((ionLimit!=0)); -+ if(ionLimit) -+ { -+ std::string sValue; -+ stream_cast(sValue,visControl.getIonDisplayLimit()); -+ textLimitOutput->SetValue(sValue); -+ } - - - -@@ -1083,6 +1092,8 @@ - //Load the file - if(!loadFile(wxF.GetPath())) - { -+ //If the load failed, do not try to set the -+ // selection & visibility - visControl.clearTreeFilterViewPersistence(); - return; - } -@@ -1093,15 +1104,6 @@ - configFile.addRecentFile(tmp); - //Update the "recent files" menu - recentHistory->AddFileToHistory(wxF.GetPath()); -- -- //If we are using the default camera, -- //move it to make sure that it is visible -- if(visControl.state.getNumCams() == 1) -- { -- visControl.scene.ensureVisible(3); -- } -- -- panelTop->forceRedraw(); - } - - void MainWindowFrame::OnFileMerge(wxCommandEvent &event) -@@ -1123,7 +1125,6 @@ - - statusMessage(TRANS("Merged file."),MESSAGE_INFO); - -- panelTop->forceRedraw(); - - setSaveStatus(); - } -@@ -1233,19 +1234,6 @@ - statusMessage(TRANS("Tip: You can use ctrl to merge"),MESSAGE_HINT); - #endif - } -- -- if(loaded || rangeLoaded) -- doSceneUpdate(); -- -- if(files.Count()) -- { -- //If we are using the default camera, -- //move it to make sure that it is visible -- if(visControl.state.getNumCams() == 1) -- { -- visControl.scene.ensureVisible(3); -- } -- } - } - - bool MainWindowFrame::loadFile(const wxString &fileStr, bool merge,bool noUpdate) -@@ -1372,7 +1360,7 @@ - updateWxTreeCtrl(treeFilters); - - if(!noUpdate) -- return doSceneUpdate(); -+ return doSceneUpdate(true); - - return true; - } -@@ -1420,10 +1408,6 @@ - } - - setSaveStatus(); -- -- //make sure camera is properly centred -- if(visControl.state.getNumCams() == 1) -- visControl.scene.ensureVisible(3); - } - - } -@@ -1725,7 +1709,12 @@ - unsigned int nFilters; - nFilters = visControl.state.treeState.size(); - comboFilters->Enable(!locking && nFilters); -- refreshButton->Enable(!locking && nFilters); -+ if(locking) -+ refreshButton->SetLabel(TRANS("Abo&rt")); -+ else -+ refreshButton->SetLabel(TRANS("&Refresh")); -+ refreshButton->Enable(nFilters); -+ - btnFilterTreeErrs->Enable(!locking); - treeFilters->Enable(!locking); - -@@ -2899,7 +2888,7 @@ - info.SetName((PROGRAM_NAME)); - info.SetVersion((PROGRAM_VERSION)); - info.SetDescription(TRANS("Quick and dirty analysis for point data.")); -- info.SetWebSite(wxT("https://sourceforge.net/apps/phpbb/threedepict/")); -+ info.SetWebSite(wxT("https://threedepict.sourceforge.net/")); - - info.AddDeveloper(wxT("D. Haley")); - info.AddDeveloper(wxT("A. Ceguerra")); -@@ -2991,7 +2980,7 @@ - void MainWindowFrame::OnComboFilterText(wxCommandEvent &event) - { - //prevent user from modifying text -- comboFilters->ChangeValue(TRANS(ADD_FILTER_TEXT)); -+ //comboFilters->ChangeValue(TRANS(ADD_FILTER_TEXT)); - } - - void MainWindowFrame::OnComboStash(wxCommandEvent &event) -@@ -3447,7 +3436,9 @@ - void MainWindowFrame::OnGridCameraPropertyChange(wxPropertyGridEvent &event) - { - -- if(programmaticEvent) -+ //Check for inited OK. Seem to be getting called before -+ //do_layout is complete. -+ if(programmaticEvent || !initedOK) - { - event.Veto(); - return; -@@ -3522,10 +3513,17 @@ - backCameraPropGrid->SetExtraStyle(PROPERTY_GRID_EXTRA_STYLE); - - visControl.updateCameraPropGrid(backCameraPropGrid,cameraId); -+ int columnPos =gridCameraProperties->GetSplitterPosition(); - - std::swap(backCameraPropGrid,gridCameraProperties); - do_cameragrid_prop_layout(); -+ gridCameraProperties->SetSplitterPosition(columnPos); - -+#ifdef __WIN32 -+ //Move the splitter panel -+ splitLeftRight->SetSashPosition(splitLeftRight->GetSashPosition()+1); -+ splitLeftRight->SetSashPosition(splitLeftRight->GetSashPosition()-1); -+#endif - //Ensure that the GL panel shows latest cam orientation - panelTop->forceRedraw(); - programmaticEvent=false; -@@ -3583,7 +3581,7 @@ - } - else - { -- -+ ASSERT(camName.size()); - //Create a new camera for the scene. - visControl.state.addCam(camName,true); - -@@ -3773,7 +3771,7 @@ - - } - --bool MainWindowFrame::doSceneUpdate() -+bool MainWindowFrame::doSceneUpdate(bool ensureVisible) - { - //Update scene - ASSERT(!currentlyUpdatingScene); -@@ -3800,6 +3798,8 @@ - //reset the progress timer animation - visControl.scene.resetProgressAnim(); - -+ ensureResultVisible=ensureVisible; -+ - ASSERT(!refreshControl); - refreshControl = new RefreshController(visControl.state.treeState); - refreshThread=new RefreshThread(this,refreshControl); -@@ -3871,7 +3871,6 @@ - //Restore the UI elements to their interactive state - setLockUI(false); - -- panelTop->forceRedraw(); - panelSpectra->Refresh(false); - - updateEditRangeMenu(); -@@ -3945,6 +3944,19 @@ - MainFrame_statusbar->SetStatusText(TRANS("Complete"),1); - MainFrame_statusbar->SetStatusText("",2); - } -+ -+ -+ if(ensureResultVisible) -+ { -+ //If we are using the default camera, -+ //move it to make sure that it is visible -+ if(visControl.state.getNumCams() == 1) -+ visControl.scene.ensureVisible(3); -+ -+ ensureResultVisible=false; -+ } -+ -+ - //restart the update timer, to check for updates from the backend - updateTimer->Start(UPDATE_TIMER_DELAY); - } -@@ -4091,12 +4103,6 @@ - - if(requireFirstUpdate && !refreshThreadActive()) - { -- //If we are using the default camera, -- //move it to make sure that it is visible -- if(visControl.state.getNumCams() == 1) -- visControl.scene.ensureVisible(3); -- -- - doSceneUpdate(); - - requireFirstUpdate=false; -@@ -4178,6 +4184,7 @@ - } - - -+ - programmaticEvent=false; - } - -@@ -4582,6 +4589,7 @@ - Thaw(); - } - -+ - //This routine is used by other UI processes to trigger an abort - void MainWindowFrame::OnProgressAbort(wxCommandEvent &event) - { -@@ -4609,8 +4617,12 @@ - if(!gridCameraProperties || !gridFilterPropGroup) - return; - -+ //Run abort code as needed - if(currentlyUpdatingScene || refreshThreadActive()) -+ { -+ OnProgressAbort(event); - return; -+ } - - //dirty hack to get keyboard state. - wxMouseState wxm = wxGetMouseState(); -@@ -4817,6 +4829,16 @@ - programmaticEvent=false; - - setSaveStatus(); -+ -+ // There is one camera that we cannot access -+ // TODO: This logic should not be here, but in the widget update -+ if(visControl.state.getNumCams() > 1) -+ { -+ visControl.updateCameraComboBox(comboCamera); -+ visControl.updateCameraPropGrid(gridCameraProperties,visControl.state.getActiveCam()); -+ } -+ else -+ gridCameraProperties->Clear(); - } - - } -diff -ruh ./src/gui/mainFrame.h ./gui/mainFrame.h ---- ./src/gui/mainFrame.h 2016-02-08 01:39:07.282999776 +0100 -+++ ./src/gui/mainFrame.h 2016-02-08 02:41:11.805762472 +0100 -@@ -117,7 +117,7 @@ - //!Update the progress information in the status bar - void updateProgressStatus(); - //!Perform an update to the 3D Scene. Returns false if refresh failed -- bool doSceneUpdate(); -+ bool doSceneUpdate(bool ensureResultVisible=false); - - //!Complete the scene update. Returns false if failed - void finishSceneUpdate(unsigned int errCode); -@@ -162,6 +162,8 @@ - bool currentlyUpdatingScene; - //!Have we aborted an update - bool haveAborted; -+ //!Should the gui ensure that the refresh result is visible at the next update? -+ bool ensureResultVisible; - - //!source item when dragging a filter in the tree control - wxTreeItemId *filterTreeDragSource; -diff -ruh ./src/testing/testing.cpp ./testing/testing.cpp ---- ./src/testing/testing.cpp 2016-02-08 01:39:07.286999777 +0100 -+++ ./src/testing/testing.cpp 2016-02-08 02:41:11.805762472 +0100 -@@ -553,7 +553,7 @@ - { - if(!testAnderson()) - return false; -- if(!testBackgroundFit()) -+ if(!testBackgroundFitMaths()) - return false; - - if(!K3DMk2Tests()) diff -Nru 3depict-0.0.19-1/debian/patches/lowercase-textdomain.patch 3depict-0.0.20/debian/patches/lowercase-textdomain.patch --- 3depict-0.0.19-1/debian/patches/lowercase-textdomain.patch 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/patches/lowercase-textdomain.patch 2017-02-05 23:41:54.000000000 +0000 @@ -1,11 +1,11 @@ Description: Debian uses different text domain for the lang files Forwarded: not-needed Author: D Haley -Index: 3depict/src/3Depict.cpp +Index: 3depict-0.0.19/src/3Depict.cpp =================================================================== ---- 3depict.orig/src/3Depict.cpp -+++ 3depict/src/3Depict.cpp -@@ -179,7 +179,7 @@ void threeDepictApp::initLanguageSupport +--- 3depict-0.0.19.orig/src/3Depict.cpp 2016-08-04 00:12:38.260085712 +0200 ++++ 3depict-0.0.19/src/3Depict.cpp 2016-08-04 00:12:38.256085765 +0200 +@@ -179,7 +179,7 @@ else { //Set the gettext language @@ -14,7 +14,7 @@ setlocale (LC_ALL, ""); #ifdef __WXMAC__ bindtextdomain( PROGRAM_NAME, paths->GetResourcesDir().mb_str(wxConvUTF8) ); -@@ -211,8 +211,8 @@ void threeDepictApp::initLanguageSupport +@@ -211,8 +211,8 @@ break; } #else diff -Nru 3depict-0.0.19-1/debian/patches/series 3depict-0.0.20/debian/patches/series --- 3depict-0.0.19-1/debian/patches/series 2016-07-25 21:00:25.000000000 +0000 +++ 3depict-0.0.20/debian/patches/series 2017-02-05 23:41:54.000000000 +0000 @@ -1,4 +1,4 @@ -configure-force-ftgl debian-desktop-naming.patch lowercase-textdomain.patch desktop-category.patch +upstream-cf4c3e-fix-slice-transparency diff -Nru 3depict-0.0.19-1/debian/patches/upstream-cf4c3e-fix-slice-transparency 3depict-0.0.20/debian/patches/upstream-cf4c3e-fix-slice-transparency --- 3depict-0.0.19-1/debian/patches/upstream-cf4c3e-fix-slice-transparency 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/debian/patches/upstream-cf4c3e-fix-slice-transparency 2017-02-05 23:41:54.000000000 +0000 @@ -0,0 +1,69 @@ +Index: 3depict-0.0.20/src/backend/filters/voxelise.cpp +=================================================================== +--- 3depict-0.0.20.orig/src/backend/filters/voxelise.cpp 2017-02-05 13:59:22.515897489 +0100 ++++ 3depict-0.0.20/src/backend/filters/voxelise.cpp 2017-02-05 15:34:12.492125435 +0100 +@@ -751,6 +751,7 @@ + + DrawTriangleMesh *tm = new DrawTriangleMesh(); + tm->canSelect=true; ++ tm->setAlpha(rgba.a()); + + + vector idx; +Index: 3depict-0.0.20/src/gl/drawables.cpp +=================================================================== +--- 3depict-0.0.20.orig/src/gl/drawables.cpp 2017-02-05 13:59:22.527897489 +0100 ++++ 3depict-0.0.20/src/gl/drawables.cpp 2017-02-05 15:34:12.496125385 +0100 +@@ -781,6 +781,7 @@ + haveCachedBounds=false; + drawMode=TRIMESH_DRAW_SURF; + deltaOrigin=Point3D(0,0,0); ++ alpha=1.0; + } + + DrawTriangleMesh::~DrawTriangleMesh() +@@ -807,8 +808,11 @@ + { + for(unsigned int uj=0;uj<3;uj++) + { +- const RGBFloat &f=triIndices[ui].col[uj]; +- glColor3fv(f.v); ++ float rgba[4]; ++ for( unsigned int uk=0;uk<3; uk++) ++ rgba[uk]=triIndices[ui].col[uj].v[uk]; ++ rgba[3]=alpha; ++ glColor4fv(rgba); + glVertex3fv(pts[triIndices[ui].idx[uj]].getValueArr()); + } + } +Index: 3depict-0.0.20/src/gl/drawables.h +=================================================================== +--- 3depict-0.0.20.orig/src/gl/drawables.h 2017-02-05 13:59:22.527897489 +0100 ++++ 3depict-0.0.20/src/gl/drawables.h 2017-02-05 15:34:12.496125385 +0100 +@@ -600,6 +600,8 @@ + // this + Point3D origCentroid,deltaOrigin; + ++ float alpha; ++ + bool drawDoubleSided; + //If true, draw the mesh edges in addition to the + // coloured triangles +@@ -629,6 +631,9 @@ + + //!Recompute the internal parameters using the input vector information + void recomputeParams(const std::vector &vecs, const std::vector &scalars, unsigned int mode); ++ ++ //!Set the opacity value (alpha) ++ void setAlpha(float f) { alpha=f;} + }; + + +@@ -680,6 +685,7 @@ + void recomputeParams(const std::vector &vecs, + const std::vector &scalars, unsigned int mode); + ++ + }; + + //!A tapered cylinder drawing class diff -Nru 3depict-0.0.19-1/docs/manual-latex/build-latex.sh 3depict-0.0.20/docs/manual-latex/build-latex.sh --- 3depict-0.0.19-1/docs/manual-latex/build-latex.sh 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/build-latex.sh 2016-10-29 20:37:05.000000000 +0000 @@ -0,0 +1,37 @@ +#!/bin/bash +LATEXBIN=pdflatex +BIBTEXBIN=bibtex +if [ x`which $LATEXBIN` == x"" ] ; then + echo "no $LATEXBIN" + exit 1 +fi + +if [ x`which $BIBTEXBIN` == x"" ] ; then + echo "no $BIBTEXBIN" + exit 1 +fi + +MANUAL=manual.tex + +#check to see if the manual and its bib file are around +if [ ! -f $MANUAL ] ; then + echo "$MANUAL is missing" + exit 1 +fi + +#Remove the old manul +rm -f manual.pdf + + + +#run the multi-pass latex build. +$LATEXBIN $MANUAL || { echo "failed latex build (pass 1 of 2)"; exit 1 ; } +$BIBTEXBIN `basename -s .tex $MANUAL` || { echo "failed bibtex build"; exit 1 ; } +$LATEXBIN $MANUAL || { echo "failed latex build (pass 2 of 2)"; exit 1 ; } + + +if [ ! -f manual.pdf ] ; then + echo "latex ran, but somehow we did not output the PDF...." + exit 1 +fi + diff -Nru 3depict-0.0.19-1/docs/manual-latex/manual.aux 3depict-0.0.20/docs/manual-latex/manual.aux --- 3depict-0.0.19-1/docs/manual-latex/manual.aux 2016-05-31 02:21:57.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/manual.aux 2017-02-05 00:04:30.000000000 +0000 @@ -142,39 +142,42 @@ \@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.9}Spatial Analysis}{31}{subsubsection.5.2.9}} \@writefile{toc}{\contentsline {paragraph}{Algorithms}{31}{section*.3}} \@writefile{toc}{\contentsline {paragraph}{Radial Distribution:}{31}{section*.4}} +\citation{Chen2014} +\citation{Stephenson2014} \@writefile{toc}{\contentsline {paragraph}{Axial Distribution:}{32}{section*.5}} \@writefile{toc}{\contentsline {paragraph}{Binomial:}{32}{section*.6}} -\@writefile{toc}{\contentsline {paragraph}{Point em/re-placement}{32}{section*.7}} -\@writefile{lot}{\contentsline {table}{\numberline {9}{\ignorespaces Propagation matrix for Spatial Analysis.}}{32}{table.9}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{32}{subsubsection.5.2.10}} +\@writefile{toc}{\contentsline {paragraph}{Point em/re-placement :}{32}{section*.7}} +\@writefile{toc}{\contentsline {paragraph}{Local concentration :}{32}{section*.8}} \citation{Stephenson07} \citation{Hyde10} \citation{Vaumousse03} +\@writefile{lot}{\contentsline {table}{\numberline {9}{\ignorespaces Propagation matrix for Spatial Analysis.}}{33}{table.9}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{33}{subsubsection.5.2.10}} \@writefile{lot}{\contentsline {table}{\numberline {10}{\ignorespaces Propagation matrix for Clustering Analysis.}}{34}{table.10}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.11}External Program}{34}{subsubsection.5.2.11}} -\@writefile{toc}{\contentsline {paragraph}{Command syntax: }{34}{section*.8}} -\@writefile{toc}{\contentsline {paragraph}{Prior to program execution:}{34}{section*.9}} -\@writefile{toc}{\contentsline {paragraph}{After program execution:}{34}{section*.10}} +\@writefile{toc}{\contentsline {paragraph}{Command syntax: }{34}{section*.9}} +\@writefile{toc}{\contentsline {paragraph}{Prior to program execution:}{34}{section*.10}} +\@writefile{toc}{\contentsline {paragraph}{After program execution:}{35}{section*.11}} \@writefile{lot}{\contentsline {table}{\numberline {11}{\ignorespaces Propagation matrix for External Program.}}{35}{table.11}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.12}Annotation}{35}{subsubsection.5.2.12}} -\@writefile{toc}{\contentsline {paragraph}{Text}{35}{section*.11}} -\@writefile{toc}{\contentsline {paragraph}{Arrow, Arrow with Text}{35}{section*.12}} -\@writefile{toc}{\contentsline {paragraph}{Angle Measurement}{35}{section*.13}} +\@writefile{toc}{\contentsline {paragraph}{Text}{35}{section*.12}} +\@writefile{toc}{\contentsline {paragraph}{Arrow, Arrow with Text}{35}{section*.13}} +\@writefile{toc}{\contentsline {paragraph}{Angle Measurement}{35}{section*.14}} \@writefile{lot}{\contentsline {table}{\numberline {12}{\ignorespaces Propagation matrix for Annotation.}}{36}{table.12}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.13}Voxels}{36}{subsubsection.5.2.13}} -\@writefile{lot}{\contentsline {table}{\numberline {13}{\ignorespaces Propagation matrix for Voxels.}}{36}{table.13}} \@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Voxelisation filter, showing different representations. Left to right shows point cloud, axial slice and isosurface mode on the same dataset}}{37}{figure.22}} \newlabel{fig:voxeliseDisplayType}{{22}{37}{Voxelisation filter, showing different representations. Left to right shows point cloud, axial slice and isosurface mode on the same dataset}{figure.22}{}} +\@writefile{lot}{\contentsline {table}{\numberline {13}{\ignorespaces Propagation matrix for Voxels.}}{37}{table.13}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.14}Ion Colour}{37}{subsubsection.5.2.14}} -\@writefile{lot}{\contentsline {table}{\numberline {14}{\ignorespaces Propagation matrix for Ion Colour.}}{37}{table.14}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.15}Ion Transform}{37}{subsubsection.5.2.15}} +\@writefile{lot}{\contentsline {table}{\numberline {14}{\ignorespaces Propagation matrix for Ion Colour.}}{38}{table.14}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.15}Ion Transform}{38}{subsubsection.5.2.15}} \@writefile{lot}{\contentsline {table}{\numberline {15}{\ignorespaces Propagation matrix for Ion Transform.}}{38}{table.15}} \@writefile{toc}{\contentsline {section}{\numberline {6}Attributions}{38}{section.6}} -\@writefile{toc}{\contentsline {section}{\numberline {7}Licence}{38}{section.7}} -\@writefile{toc}{\contentsline {section}{\numberline {8}Appendices}{38}{section.8}} -\newlabel{sec:appendix}{{8}{38}{Appendices}{section.8}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Paths}{38}{subsection.8.1}} -\newlabel{sec:3DepictPaths}{{8.1}{38}{Paths}{subsection.8.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7}Licence}{39}{section.7}} +\@writefile{toc}{\contentsline {section}{\numberline {8}Appendices}{39}{section.8}} +\newlabel{sec:appendix}{{8}{39}{Appendices}{section.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Paths}{39}{subsection.8.1}} +\newlabel{sec:3DepictPaths}{{8.1}{39}{Paths}{subsection.8.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {8.2}File formats}{39}{subsection.8.2}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.1}State file}{39}{subsubsection.8.2.1}} \newlabel{sec:xmlstatefile}{{8.2.1}{39}{State file}{subsubsection.8.2.1}{}} @@ -184,14 +187,14 @@ \newlabel{sec:posformat}{{8.2.3}{41}{POS files}{subsubsection.8.2.3}{}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.4}Text files}{41}{subsubsection.8.2.4}} \newlabel{sec:textformat}{{8.2.4}{41}{Text files}{subsubsection.8.2.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}External Program Examples}{41}{subsection.8.3}} -\newlabel{sec:externalProgExample}{{8.3}{41}{External Program Examples}{subsection.8.3}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Example program screenshot using the \emph {Scilab} sample script. The \%i value in the command line instructs \emph {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program. }}{42}{figure.23}} -\newlabel{fig:externalProgScilabSample}{{23}{42}{Example program screenshot using the \emph {Scilab} sample script. The \%i value in the command line instructs \emph {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program}{figure.23}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}External Program Examples}{42}{subsection.8.3}} +\newlabel{sec:externalProgExample}{{8.3}{42}{External Program Examples}{subsection.8.3}{}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.1}Scilab}{42}{subsubsection.8.3.1}} -\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows.}}{46}{figure.24}} -\newlabel{fig:externalProgPythonSample}{{24}{46}{Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows}{figure.24}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Example program screenshot using the \emph {Scilab} sample script. The \%i value in the command line instructs \emph {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program. }}{43}{figure.23}} +\newlabel{fig:externalProgScilabSample}{{23}{43}{Example program screenshot using the \emph {Scilab} sample script. The \%i value in the command line instructs \emph {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program}{figure.23}{}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.2}Python}{46}{subsubsection.8.3.2}} +\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows.}}{47}{figure.24}} +\newlabel{fig:externalProgPythonSample}{{24}{47}{Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows}{figure.24}{}} \@writefile{lof}{\contentsline {figure}{\numberline {25}{\ignorespaces Example program screenshot when using the BASH test example.}}{48}{figure.25}} \newlabel{fig:externalProgBashSample}{{25}{48}{Example program screenshot when using the BASH test example}{figure.25}{}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.3}Bash}{48}{subsubsection.8.3.3}} @@ -200,11 +203,11 @@ \newlabel{fig:externalProgCppSample}{{26}{50}{Example program screenshot without and with the C++ test example present.}{figure.26}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {8.4}Modifying the program}{54}{subsection.8.4}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.1}Development tools}{54}{subsubsection.8.4.1}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{54}{subsubsection.8.4.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{55}{subsubsection.8.4.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.3}Changing stuff}{55}{subsubsection.8.4.3}} \bibstyle{unsrt} \bibdata{manual} \bibcite{Moody2008}{1} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.3}Changing stuff}{55}{subsubsection.8.4.3}} \bibcite{Gault2012}{2} \bibcite{Geiser2007}{3} \bibcite{Boll2007}{4} diff -Nru 3depict-0.0.19-1/docs/manual-latex/manual.blg 3depict-0.0.20/docs/manual-latex/manual.blg --- 3depict-0.0.19-1/docs/manual-latex/manual.blg 2016-05-31 02:21:48.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/manual.blg 2017-02-05 00:04:27.000000000 +0000 @@ -1,11 +1,13 @@ -This is BibTeX, Version 0.99d (TeX Live 2013/Debian) -Capacity: max_strings=35307, hash_size=35307, hash_prime=30011 +This is BibTeX, Version 0.99d (TeX Live 2016/Debian) +Capacity: max_strings=100000, hash_size=100000, hash_prime=85009 The top-level auxiliary file: manual.aux The style file: unsrt.bst Database file #1: manual.bib +Warning--I didn't find a database entry for "Chen2014" +Warning--I didn't find a database entry for "Stephenson2014" You've used 7 entries, 1791 wiz_defined-function locations, - 493 strings with 4873 characters, + 497 strings with 4917 characters, and the built_in function-call counts, 1680 in all, are: = -- 137 > -- 98 @@ -44,3 +46,4 @@ while$ -- 13 width$ -- 8 write$ -- 78 +(There were 2 warnings) diff -Nru 3depict-0.0.19-1/docs/manual-latex/manual.log 3depict-0.0.20/docs/manual-latex/manual.log --- 3depict-0.0.19-1/docs/manual-latex/manual.log 2016-05-31 02:21:57.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/manual.log 2017-02-05 00:04:30.000000000 +0000 @@ -1,15 +1,15 @@ -This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2016.5.5) 31 MAY 2016 12:21 +This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/Debian) (preloaded format=pdflatex 2016.11.12) 5 FEB 2017 00:04 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **manual.tex (./manual.tex -LaTeX2e <2011/06/27> -Babel <3.9h> and hyphenation patterns for 2 languages loaded. +LaTeX2e <2016/03/31> patch level 3 +Babel <3.9r> and hyphenation patterns for 3 language(s) loaded. (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls -Document Class: article 2007/10/19 v1.4h Standard LaTeX document class +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) ) \c@part=\count79 \c@section=\count80 @@ -28,31 +28,31 @@ \FP@margin=\skip43 ) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) \KV@toks@=\toks14 ) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) +Package: graphics 2016/07/10 v1.0t Standard LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +Package: trig 2016/01/03 v1.10 sin cos tan (DPC) ) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg -File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) -Package graphics Info: Driver file: pdftex.def on input line 91. +Package graphics Info: Driver file: pdftex.def on input line 99. -(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def -File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2016/07/10 v0.06j Graphics/color for pdfTeX (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) ) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) ) \Gread@gobject=\count87 )) @@ -64,96 +64,95 @@ Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX +Package: hyperref 2016/06/24 v6.83q Hypertext links for LaTeX (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) +Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) -Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO) +Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO) Package hobsub Info: Skipping package `infwarerr' (already loaded). Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) Package ifluatex Info: LuaTeX not detected. -Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) Package ifvtex Info: VTeX not detected. -Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) -Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in PDF mode is detected. -Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) +Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO) +Package: ifpdf 2016/05/14 v3.1 Provides the ifpdf switch +Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) Package etexcmds Info: Could not find \expanded. (etexcmds) That can mean that you are not using pdfTeX 1.50 or (etexcmds) that some package has redefined \expanded. (etexcmds) In the latter case, load this package earlier. -Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) -Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) -Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) +Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) +Package: pdftexcmds 2016/05/21 v0.22 Utility functions of pdfTeX for LuaTeX (HO ) Package pdftexcmds Info: LuaTeX not detected. Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO ) -Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) -Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO) +Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO) ) Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) -Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) -Package: xcolor-patch 2011/01/30 xcolor patch -Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO) +Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO) +Package: xcolor-patch 2016/05/16 xcolor patch +Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO) Package atveryend Info: \enddocument detected (standard20110627). -Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) -Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) -Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO) +Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO) +Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO) ) (/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty -Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO) ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) +Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) ) \@linkdim=\dimen105 \Hy@linkcounter=\count88 \Hy@pagecounter=\count89 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +File: pd1enc.def 2016/06/24 v6.83q Hyperref: PDFDocEncoding definition (HO) ) \Hy@SavedSpaceFactor=\count90 (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive ) -Package hyperref Info: Hyper figures OFF on input line 4443. -Package hyperref Info: Link nesting OFF on input line 4448. -Package hyperref Info: Hyper index ON on input line 4451. -Package hyperref Info: Plain pages OFF on input line 4458. -Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Hyper figures OFF on input line 4486. +Package hyperref Info: Link nesting OFF on input line 4491. +Package hyperref Info: Hyper index ON on input line 4494. +Package hyperref Info: Plain pages OFF on input line 4501. +Package hyperref Info: Backreferencing OFF on input line 4506. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4688. +Package hyperref Info: Bookmarks ON on input line 4735. \c@Hy@tempcnt=\count91 -LaTeX Info: Redefining \url on input line 5041. +LaTeX Info: Redefining \url on input line 5088. \XeTeXLinkMargin=\dimen106 \Fld@menulength=\count92 \Field@Width=\dimen107 \Fld@charsize=\dimen108 -Package hyperref Info: Hyper figures OFF on input line 6295. -Package hyperref Info: Link nesting OFF on input line 6300. -Package hyperref Info: Hyper index ON on input line 6303. -Package hyperref Info: backreferencing OFF on input line 6310. -Package hyperref Info: Link coloring OFF on input line 6315. -Package hyperref Info: Link coloring with OCG OFF on input line 6320. -Package hyperref Info: PDF/A mode OFF on input line 6325. -LaTeX Info: Redefining \ref on input line 6365. -LaTeX Info: Redefining \pageref on input line 6369. +Package hyperref Info: Hyper figures OFF on input line 6342. +Package hyperref Info: Link nesting OFF on input line 6347. +Package hyperref Info: Hyper index ON on input line 6350. +Package hyperref Info: backreferencing OFF on input line 6357. +Package hyperref Info: Link coloring OFF on input line 6362. +Package hyperref Info: Link coloring with OCG OFF on input line 6367. +Package hyperref Info: PDF/A mode OFF on input line 6372. +LaTeX Info: Redefining \ref on input line 6412. +LaTeX Info: Redefining \pageref on input line 6416. \Hy@abspage=\count93 \c@Item=\count94 \c@Hfootnote=\count95 @@ -162,12 +161,12 @@ Package hyperref Message: Driver (autodetected): hpdftex. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +File: hpdftex.def 2016/06/24 v6.83q Hyperref driver for pdfTeX \Fld@listcount=\count96 \c@bookmark@seq@number=\count97 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty -Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 82. ) @@ -201,7 +200,7 @@ LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 14. LaTeX Font Info: ... okay on input line 14. -(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] \scratchcounter=\count99 \scratchdimen=\dimen111 @@ -215,15 +214,17 @@ \makeMPintoPDFobject=\count104 \everyMPtoPDFconversion=\toks17 ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf +Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty -Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) ) +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +38. Package grfext Info: Graphics extension search list: (grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 452. +(grfext) \AppendGraphicsExtensions on input line 456. (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv @@ -233,10 +234,10 @@ Package hyperref Info: Link coloring OFF on input line 14. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section +Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO) ) \c@section@level=\count105 ) @@ -311,7 +312,7 @@ (/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd -File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 104. @@ -496,72 +497,105 @@ LaTeX Warning: `!h' float specifier changed to `!ht'. -[30] [31] [32] +[30] -LaTeX Warning: `!h' float specifier changed to `!ht'. +LaTeX Warning: Citation `Moody2008' on page 31 undefined on input line 916. + + +LaTeX Warning: Citation `Gault2012' on page 31 undefined on input line 923. + + +LaTeX Warning: Citation `Geiser2007' on page 31 undefined on input line 927. + + +LaTeX Warning: Citation `Boll2007' on page 31 undefined on input line 927. + +[31] + +LaTeX Warning: Citation `Chen2014' on page 32 undefined on input line 933. + + +LaTeX Warning: Citation `Stephenson2014' on page 32 undefined on input line 933 +. -[33] LaTeX Warning: `!h' float specifier changed to `!ht'. -[34] [35] -<./figures/voxel-representations.png, id=1434, 1615.03375pt x 1027.84pt> +[32] + +LaTeX Warning: Citation `Stephenson07' on page 33 undefined on input line 976. + + +LaTeX Warning: Citation `Hyde10' on page 33 undefined on input line 976. + + +LaTeX Warning: Citation `Vaumousse03' on page 33 undefined on input line 976. + +[33] [34] [35] +<./figures/voxel-representations.png, id=1423, 1615.03375pt x 1027.84pt> File: ./figures/voxel-representations.png Graphic file (type png) Package pdftex.def Info: ./figures/voxel-representations.png used on input line - 1114. + 1128. (pdftex.def) Requested size: 422.77664pt x 269.06708pt. - [36] [37 <./figures/voxel-representations.png>] [38] [39] [40] [41] -<./figures/externalProgScilab.png, id=1484, 1686.3pt x 847.165pt> + + +LaTeX Warning: `!h' float specifier changed to `!ht'. + +[36] + +LaTeX Warning: `!h' float specifier changed to `!ht'. + +[37 <./figures/voxel-representations.png>] [38] [39] [40] [41] +<./figures/externalProgScilab.png, id=1472, 1686.3pt x 847.165pt> File: ./figures/externalProgScilab.png Graphic file (type png) Package pdftex.def Info: ./figures/externalProgScilab.png used on input line 13 -61. +75. (pdftex.def) Requested size: 422.77664pt x 212.38535pt. - [42 <./figures/externalProgScilab.png>] -[43] [44] [45] -<./figures/externalProgPython.png, id=1505, 1465.475pt x 856.19875pt> + [42] [43 <./figures/externalProgScilab.png>] [44] [45] +<./figures/externalProgPython.png, id=1493, 1465.475pt x 856.19875pt> File: ./figures/externalProgPython.png Graphic file (type png) Package pdftex.def Info: ./figures/externalProgPython.png used on input line 15 -42. +56. (pdftex.def) Requested size: 399.29463pt x 233.28014pt. - [46 <./figures/externalProgPython.png>] -[47] <./figures/externalProgBash.png, id=1517, 1385.175pt x 876.27374pt> + [46] [47 <./figures/externalProgPython.png>] <./figures/externalProgBash.png, +id=1505, 1385.175pt x 876.27374pt> File: ./figures/externalProgBash.png Graphic file (type png) -Package pdftex.def Info: ./figures/externalProgBash.png used on input line 1616 +Package pdftex.def Info: ./figures/externalProgBash.png used on input line 1630 . (pdftex.def) Requested size: 399.29463pt x 252.5886pt. [48 <./figures/externalProgBash.png>] -LaTeX Font Info: Try loading font information for OMS+cmtt on input line 167 -3. -LaTeX Font Info: No file OMScmtt.fd. on input line 1673. +LaTeX Font Info: Try loading font information for OMS+cmtt on input line 168 +7. +LaTeX Font Info: No file OMScmtt.fd. on input line 1687. LaTeX Font Warning: Font shape `OMS/cmtt/m/n' undefined (Font) using `OMS/cmsy/m/n' instead -(Font) for symbol `textbraceleft' on input line 1673. +(Font) for symbol `textbraceleft' on input line 1687. -<./figures/externalProgCpp.png, id=1524, 2123.935pt x 839.135pt> +[49] <./figures/externalProgCpp.png, id=1516, 2123.935pt x 839.135pt> File: ./figures/externalProgCpp.png Graphic file (type png) -Package pdftex.def Info: ./figures/externalProgCpp.png used on input line 1681. +Package pdftex.def Info: ./figures/externalProgCpp.png used on input line 1695. (pdftex.def) Requested size: 399.29463pt x 157.74715pt. - [49] [50 <./figures/externalProgCpp.png>] -[51] [52] [53] [54] (./manual.bbl [55]) -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1926. + [50 <./figures/externalProgCpp.png>] +[51] [52] [53] [54] [55] (./manual.bbl) +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1940. [56] -Package atveryend Info: Empty hook `AfterLastShipout' on input line 1926. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 1940. (./manual.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1926. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1926. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1940. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1940. Package rerunfilecheck Info: File `manual.out' has not changed. (rerunfilecheck) Checksum: 5D9DF5F8101C21D1BE54E57385EA4596;5634. @@ -569,13 +603,19 @@ LaTeX Font Warning: Some font shapes were not available, defaults substituted. -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1926. + +LaTeX Warning: There were undefined references. + + +LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. + +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1940. ) Here is how much of TeX's memory you used: - 5703 strings out of 495028 - 86896 string characters out of 6181498 - 165302 words of memory out of 5000000 - 8626 multiletter control sequences out of 15000+600000 + 5721 strings out of 494945 + 87217 string characters out of 6181031 + 166680 words of memory out of 5000000 + 8727 multiletter control sequences out of 15000+600000 13156 words of font info for 46 fonts, out of 8000000 for 9000 14 hyphenation exceptions out of 8191 29i,11n,28p,1058b,447s stack positions out of 5000i,500n,10000p,200000b,80000s @@ -590,16 +630,17 @@ lic/amsfonts/cm/cmr6.pfb> -Output written on manual.pdf (60 pages, 4523074 bytes). +fb> +Output written on manual.pdf (60 pages, 4532368 bytes). PDF statistics: - 1676 PDF objects out of 1728 (max. 8388607) - 1296 compressed objects within 13 object streams - 214 named destinations out of 1000 (max. 500000) + 1674 PDF objects out of 1728 (max. 8388607) + 1293 compressed objects within 13 object streams + 215 named destinations out of 1000 (max. 500000) 816 words of extra memory for PDF output out of 10000 (max. 10000000) Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/docs/manual-latex/manual.pdf and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/docs/manual-latex/manual.pdf differ diff -Nru 3depict-0.0.19-1/docs/manual-latex/manual.tex 3depict-0.0.20/docs/manual-latex/manual.tex --- 3depict-0.0.19-1/docs/manual-latex/manual.tex 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/manual.tex 2017-01-27 00:50:07.000000000 +0000 @@ -28,7 +28,7 @@ \vspace{1.0 cm} -{ \Huge \bfseries User manual}\\[0.4cm] +{\Huge \bfseries User manual}\\[0.4cm] \vspace{1.0 cm} @@ -40,7 +40,7 @@ \begin{minipage}{0.3\textwidth} \begin{flushright} \large \emph{Version:} \\ - 0.0.19, May 2016\end{flushright} + 0.0.20, Feb 2017\end{flushright} \end{minipage} \vfill @@ -327,7 +327,7 @@ \end{figure} -To display the ranged spectrum, simply use the sequence \texttt{Data$\rightarrow$Ranging$\rightarrow$Spectrum}, as shown in Figure~\ref{fig:rangedSpectrum}. To see the ions outside existing ranges, untick ``drop unranged`` from the range filter. Note that as the data is converted into a spectrum, the 3D view will disappear. To see both the spectrum and the point data at the same time, use the configuration shown in Figure~\ref{fig:rangedSpectrumWithCloud}. +To display the ranged spectrum, simply use the sequence \texttt{Data$\rightarrow$Ranging$\rightarrow$Spectrum}, as shown in Figure~\ref{fig:rangedSpectrum}. To see the ions outside existing ranges, untick ``drop unranged'' from the range filter. Note that as the data is converted into a spectrum, the 3D view will disappear. To see both the spectrum and the point data at the same time, use the configuration shown in Figure~\ref{fig:rangedSpectrumWithCloud}. \begin{figure}[h] \centering @@ -353,7 +353,7 @@ \subsection{Counting Points and measuring volume} -To compute the absolute counts of the number of ions that are visible in the dataset, use the ``Ion information'' filter, as shown in Figure~\ref{fig:quickStartIonInfoLayout}. To compute the ion count, check the ``count'' box. To compute the dataset volume, select the ''volume'' checkbox, and the desired algorithm (For algorithm details see Section~\ref{sec:FilterIonInformation}). The results are displayed in the console window (Figure~\ref{fig:quickStartIonInfoLayout}). +To compute the absolute counts of the number of ions that are visible in the dataset, use the ``Ion information'' filter, as shown in Figure~\ref{fig:quickStartIonInfoLayout}. To compute the ion count, check the ``count'' box. To compute the dataset volume, select the ``volume'' checkbox, and the desired algorithm (For algorithm details see Section~\ref{sec:FilterIonInformation}). The results are displayed in the console window (Figure~\ref{fig:quickStartIonInfoLayout}). \begin{figure}[h] \centering @@ -410,9 +410,9 @@ Using this method, one may create a variety of different analyses; for example, one may wish to subsample data before performing a time-consuming spatial analysis, or one may wish to clip the data to remove unwanted sections before generation of a value spectrum. The flexibility of the filter system supports this concept. -Note that items in the filter tree can be moved. You may move any filter to a new parent by dragging with the mouse. In order to copy instead of move, hold down the \texttt{Ctrl} whilst moving to duplicate the filter, rather than moving it. +Note that items in the filter tree can be moved. You may move any filter to a new parent by dragging with the mouse. In order to copy instead of move, hold down the \texttt{Ctrl} whilst moving to duplicate the filter, rather than moving it. You can ``splice'' the node to a new location (change its parent, without moving its children) by holding down \texttt{Shift} whilst dragging. -You may also rename filters in the tree; The filter name may be used by the filter to generate its output, \emph{e.g.}\ spectrum plots will take the plot title from the filter name. +You may also rename filters in the tree by clicking (long-click, or three-times slow). The filter name may be used by the filter to generate its output, \emph{e.g.}\ spectrum plots will take the plot title from the filter name. @@ -467,7 +467,7 @@ Exporting Ion data can be done in several ways; you may export only the visible ions, or alternately, you may export only a subset (for example one or two ranges) of the data, depending upon the filter that the data emerged from (\emph{i.e.}\ per leaf filter). The output format will be in Big-endian ``POS'' format, as detailed in the Appendix, Section~\ref{sec:posformat}. -Modified range files may be exported in whole. Currently the only supported export format is the oak-ridge``RNG'' format +Modified range files may be exported in whole. Currently the only supported export format is the oak-ridge ``RNG'' format Using simple animations of the 3D data can be constructed, where the current camera is orbited 360 degrees around its target location. The result is saved as an image sequence, which can be converted into an AVI using programs such as \emph{ImageJ}, or \emph{ffmpeg} to convert the constructed image sequence into a video file. @@ -478,7 +478,7 @@ \subsubsection{Ranging dialog} The ranging dialog allows for the complete editing of range files within the program. The range files can be arbitrarily modified, as desired. To access the range dialog, this can be obtained from the Edit->Range menu. However, this is only accessible if there are range and spectra available from within the range tree. Note that, at this time (0.0.15), the altered ranges will not be persistent between 3Depict sessions. An initial range file that can be loaded into the filter tree is required at this time. -The dialog is split in two, with a tab panel on the left and a spectrum on the right. If there are several spectra that are rangeable, the spectrum can be selected from the tab panel. Once selected, any existing ranges can be moved and interacted with using the right hand view. Unlike the ranging area, the ranges shown in the spectrum can be moved arbitrarily - \emph{i.e.}, they may overlap, or otherwise be moved past one another. This allows for completely unconstrained editing of the spectrum. Clashes will be shown with a red marker a the top of the spectrum (Figure~\ref{fig:rangeEditClash}), and must be resolved before the changes can be committed. +The dialog is split in two, with a tab panel on the left and a spectrum on the right. If there are several spectra that are rangeable, the spectrum can be selected from the tab panel. Once selected, any existing ranges can be moved and interacted with using the right hand view. Unlike the ranging area, the ranges shown in the spectrum can be moved arbitrarily - \emph{i.e.}, they may overlap, or otherwise be moved past one another. This allows for completely unconstrained editing of the spectrum. Clashes will be shown with a red marker at the top of the spectrum (Figure~\ref{fig:rangeEditClash}), and must be resolved before the changes can be committed. New species and ranges can be added using the Add/Remove buttons in the ``Ranges'' tab. First select the grid you wish to edit, then add the new range. Note that if the range is not fully specified, it will be highlighted in the grid - you must set each field in the grid prior to use. @@ -546,7 +546,7 @@ \end{center} \end{figure} -The properties selected for a filter will be linearly interpolated from start to finish, so, for example, setting a property at frame 1 to ``1'', and frame 10 to ``10'', each frame between will change as 1,2,3...,9,10. This can be done for multiple properties at any one time. Similarly for colours, the interpolation will be done linearly on the colour's red/green/blue value, so, similarly, colours can also be animated. Whilst linear interpolation can be done for colours, points and digit values, it is not possible to do this for so-called ``strings'' (text values); these values must be treated specially, as shown in Figure~\ref{fig:animatePropString}. +The properties selected for a filter will be linearly interpolated from start to finish, so, for example, setting a property at frame 1 to ``1'', and frame 10 to ``10'', each frame between will change as 1,2,3\ldots,9,10. This can be done for multiple properties at any one time. Similarly for colours, the interpolation will be done linearly on the colour's red/green/blue value, so, similarly, colours can also be animated. Whilst linear interpolation can be done for colours, points and digit values, it is not possible to do this for so-called ``strings'' (text values); these values must be treated specially, as shown in Figure~\ref{fig:animatePropString}. \begin{figure} @@ -571,9 +571,9 @@ \end{center} \end{figure} -Once the desired properties have been set in the filter view, then one proceeds to the frame view in order to review the animation by examining the properties that will be obtained in each filter, frame-by-frame. If you are familiar with this dialog, then it is easy to simply examine this quickly to ensure that the properties that were intended have been obtained. Now, having ensured that this is the case, it can be seen that the "OK" button cannot be pressed at this time. Firstly, the desired outputs, and the directory that they will be sent to during the animation process must be specified. Once the output directory is set, the desired outputs, normally either images, or points are to be selected as required. The checkbox `` '', if set, will cause only the changes that actually alter the computation internal computation to be saved. As an example, if one was to animate the ``Load Limit'' property of the ``Pos Data'' filter, and the file to be opened was only 1~MB, but the animation proceeded as 0.5, 0.6... +Once the desired properties have been set in the filter view, then one proceeds to the frame view in order to review the animation by examining the properties that will be obtained in each filter, frame-by-frame. If you are familiar with this dialog, then it is easy to simply examine this quickly to ensure that the properties that were intended have been obtained. Now, having ensured that this is the case, it can be seen that the "OK" button cannot be pressed at this time. Firstly, the desired outputs, and the directory that they will be sent to during the animation process must be specified. Once the output directory is set, the desired outputs, normally either images, or points are to be selected as required. The checkbox, if set, will cause only the changes that actually alter the computation internal computation to be saved. As an example, if one was to animate the ``Load Limit'' property of the ``Pos Data'' filter, and the file to be opened was only 1~MB, but the animation proceeded as 0.5, 0.6\ldots , - 1.0,1.1... , when the sampling value exceeds 1~MB, there is no effect on the computation, thus the program will not save data on frames that do not alter the output. + 1.0,1.1\ldots , when the sampling value exceeds 1~MB, there is no effect on the computation, thus the program will not save data on frames that do not alter the output. \section{Detailed Reference} \subsection{Data types} @@ -620,7 +620,7 @@ \item \textbf{Enabled}: Disable/enable the filter. -\item \textbf{Monitor}: Monitors the timestamp of the input file for changes -- if the timestamp on the file changes, then the data file will be reloaded, and the filter tree refreshed. This is useful when generating data files programatically. +\item \textbf{Monitor}: Monitors the timestamp of the input file for changes -- if the timestamp on the file changes, then the data file will be reloaded, and the filter tree refreshed. This is useful when generating data files programmatically. \item \textbf{Ion colour}: Colour of the ions from the 3D view. \item \textbf{Ion size}: Default size of points in 3D view. \item \textbf{Filename}: name of the file to load the data form. @@ -632,7 +632,7 @@ {% \newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}} -\begin{table}[!Htb] +\begin{table}[!htb] \caption{Propagation matrix for Data load.} \begin{center} @@ -846,8 +846,7 @@ \item \textbf{Flat TOF} : this mode uses a sqrt-mass (as mass is proportional to the square of the TOF) extract and fit method to estimate the background in the spectrum. This uses the data between the specified start and end mass to perform fitting. If insufficient data has been obtained to validate the fit (binned data must form a gaussian distribution, anderson test), then no corrected spectrum is created, and a message is generated. \item \textbf{Mass Start} : This specifies the start of the cutoff window for choosing the data. The window must span a region of background. \item \textbf{Mass End} : This specifies the end of the cutoff window for choosing the data. -.\end{itemize} -e that for + \end{itemize} \end{itemize} {% \newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}} @@ -916,17 +915,32 @@ \item \textbf{Axial distribution} : Computes the so-called ``directional RDF'' or 1D RDF, which can be used to measure spatial correlations between points. \item \textbf{Binomial distribution} : Computes the binomial distribution probabilities for the dataset, using the method of Moody et al~\cite{Moody2008}. \item \textbf{Point em/re-placement} : Replace or load points with specified points from a file, using subtract, intersect and union modes +\item \textbf{Local concentration} : Compute the local chemistry of selected species around each point in the dataset, and assign this value to the point. \end{itemize} + + Local density and density filtering algorithms are relatively simple, and mostly are self-contained concepts. This can be used to identify the local density in your dataset, which in the case of APT, originates due to limitations in the technique. For the Radial Distribution Function (RDF) algorithm , this can be used to examine local correlations between points, which may or may not exist in your dataset. The RDF technique is covered in several standard textbooks on APT~\cite{Gault2012}. \paragraph{Radial Distribution:} The radial distribution function counts pair-pair distances between species. This can be used to find local tests whereby certain point types are more likely to be present at given distances from one another. Note that the distribution often requires normalisation by $y=x^2$, at this time this is not implemented and needs to be done manually. \paragraph{Axial Distribution:} Axial distribution functions are covered in technical literature where they find use in APT and be referred to via a number of differing names, such as ``SDM''s~\cite{Geiser2007}, atom-vicinity~\cite{Boll2007}, or directional pair-correlation functions. The axial distribution function implementation in \emph{3Depict}, allows for users to select and drag out the region to be analysed, with the axis of the cylinder providing both the cropping orientation and the axial direction in which to perform the calculation. -\paragraph{Binomial:} The binomial distribution function can be used to test for randomness in the spatial distribution of the points. The program computes a ``p'' value, which is the probability that the observed data was drawn from a randomly distributed (at the scale of the analysis) set of values on fixed data points. Grouping is performed by a grid-extrusion algorithm, which assigns each set of points in the dataset to a given bin, and thus a given count in the output histogram. The output histogram shows number of occurrences of the observation that a bin contains a given number of counts. This method (or any statistical test) cannot prove randomness, only non-randomness, which may come from many sources. One must be careful when using this mode (or any statistical test), and careful reading of the available literature is recommended. \emph{3Depict} does not implement the two-pass method of Moody for computing grid sizes at this time (October, 2013), but rather performs only the first pass. +\paragraph{Binomial:} The binomial distribution function can be used to test for randomness in the spatial distribution of the points. The program computes a ``p'' value, which is the probability that the observed data was drawn from a randomly distributed (at the scale of the analysis) set of values on fixed data points. Grouping is performed by a grid-extrusion algorithm, which assigns each set of points in the dataset to a given bin, and thus a given count in the output histogram. The output histogram shows number of occurrences of the observation that a bin contains a given number of counts. This method (or any statistical test) cannot prove randomness, only non-randomness, which may come from many sources. One must be careful when using this mode (or any statistical test), and careful reading of the available literature is recommended. \emph{3Depict} does not implement the two-pass method of Moody for computing grid sizes at this time (July, 2016), but rather performs only the first pass. + +\paragraph{Point em/re-placement :}This function allows for merging points in the current data, $A$ from another file, $B$. There are several operating modes, ``subtract'',``intersect'' and ``union''. In the subtract mode, points which have a matching element in $B$ will be removed. In intersect mode, \emph{only} points that have a matching point in the file will be retained - the value to be assigned to the point is taken from $B$. Similarly, in union mode, both $A$ and $B$ are loaded, but overlapping points in $A$ will be removed and the value taken from $B$. Only POS files are supported in this mode. Text files cannot be used at this time. The match tolerance parameter controls how close the match must be to eliminate points. + +\paragraph{Local concentration :} This mode computes the local concentration surrounding each atom, by identifying nearest neighbour points species and then using the NN points to assign a concentration value for that atom, similar to the calculations of Chen~\cite{Chen2014} and Stephenson~\cite{Stephenson2014} (Open aces). To perform this calculation, there are two types of points ``Source'' and ``target'', and there are two sub-types of ``target'' as given below: + +\begin{itemize} +\item \emph{Source} - Points of this species type are used to initiate searching. +\item \emph{Target} - These points are included in points that are allowed to match. Other points are ignored. Target points can be assigned into either, or both, of two categories: \emph{numerator},$N$ or \emph{denominator}, $D$. The categories can be chosen from a list of items in the filter properties. +\end{itemize} + +The value of the concentration is determined using the equation $C = \frac{||N||}{|||D||} \times 100$, where $C$ is concentration in percent. I.e., the concentration is the number of numerator points divided by the number of numerator and denominator points. Note that all points that are zero distance from the source point skipped for the calculation of $N$ and $D$. If ${ ||D||}$ is zero, then $C$ is undefined according to the previous equation, and in this case $C$ is set to $-1$. In nearest-neighbour mode, the program will keep searching for more neighbours to complete the computation. If insufficient neighbours can be found, then $C$ is set to $-1$. + +As a consequence of the definition of numerator and denominator, if these selections are the same, then $||N|| == ||D||$, and all ions will be end up being assigned a concentration of $100\%$ -\paragraph{Point em/re-placement} : This function allows for merging points in the current data, $A$ from another file, $B$. There are several operating modes, ``subtract'',``intersect'' and ``union''. In the subtract mode, points which have a matching element in $B$ will be removed. In intersect mode, \emph{only} points that have a matching point in the file will be retained - the value to be assigned to the point is taken from $B$. Similarly, in union mode, both $A$ and $B$ are loaded, but overlapping points in $A$ will be removed and the value taken from $B$. Only POS files are supported in this mode. Text files cannot be used at this time. The match tolerance parameter controls how close the match must be to eliminate points. {% \newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}} \begin{table}[!h] @@ -1225,9 +1239,9 @@ \label{sec:3DepictPaths} \emph{3Depict} uses one of several different paths for storing configuration and autosave information, depending upon your host operating system. \begin{itemize} - \item Linux-like : your home directory, in th .3Depict folder. \emph{e.g.} \path{/home/someuser/.3Depict/} + \item Linux-like : your home directory, in the .3Depict folder. \emph{e.g.} \path{/home/someuser/.3Depict/} \item Mac OSX :\path{/Users/someuser/Documents/.3Depict/} - \item Windows : usually \path{C:\Documents} \path{and} \path{settings\someuser\Documents\.3Depict\} %Sigh - path macro doesn't work with whitespace! + \item Windows : usually \path{C:\Documents} \path{and} \path{settings\someuser\Documents\.3Depict\} , or \path{C:\Users\someuser\Documents\.3Depict} %Sigh - path macro doesn't work with whitespace! \end{itemize} \subsection{File formats} @@ -1555,7 +1569,7 @@ #Function to append the contents of one file to another def appendFile(sourceFile,targetFile): - try : + try : fileSrc = open(sourceFile,"rb") fileTarget = open(targetFile,"ab") @@ -1652,7 +1666,7 @@ The output from running the refresh cycle is given, as it appears on the program console (to replicate this mac/windows users may need to redirect the output to a file in order to see the output text (this can be done in bash), or mac users may launch \emph{3Depict} from terminal.app). -Firstly, note that the \emph{same file} is written to each time - \emph{3Depict} does not delete the ``script-output-3Depict-input.pos``, so if this is named differently between refreshes, multiple pos files would be generated and \emph{3Depict} would load them all. Finally, the statement \texttt{exit 0} is used to ensure that \emph{3Depict} knows that the program terminated successfully. Recall that returning a nonzero value will inform \emph{3Depict} that some error occurred during processing, and thus it will abort further data processing. +Firstly, note that the \emph{same file} is written to each time - \emph{3Depict} does not delete the ``script-output-3Depict-input.pos'', so if this is named differently between refreshes, multiple pos files would be generated and \emph{3Depict} would load them all. Finally, the statement \texttt{exit 0} is used to ensure that \emph{3Depict} knows that the program terminated successfully. Recall that returning a nonzero value will inform \emph{3Depict} that some error occurred during processing, and thus it will abort further data processing. \begin{verbatim} Working Directory: /home/username/3Depict/src @@ -1668,7 +1682,7 @@ \end{verbatim} \subsubsection{C/C++} -For \emph{C/C++}, an example is given. The example here is somewhat more complex than the rest, as in this case, we do not simply treat the data as a series of bytes, bt we additionally perform the data transformation steps required to get it into a usable form (ie as a list of correctly ordered bytes in memory, in a useful variable). This was not done for the previous examples. +For \emph{C/C++}, an example is given. The example here is somewhat more complex than the rest, as in this case, we do not simply treat the data as a series of bytes, but we additionally perform the data transformation steps required to get it into a usable form (\emph{i.e.} as a list of correctly ordered bytes in memory, in a useful variable). This was not done for the previous examples. Note that as C/C++ are compiled languages, it is necessary to be able to be able to generate a binary (executable) version of the program - this procedure is not described here, but users are encouraged to be comfortable with this process before attempting to implement the following examples for themselves. The exact procedure for doing this is outside of the scope for this document - you will require a compiler, such as \emph{gcc}'s \emph{g++} compiler, which you will most likely want to install from some form of package management system, such as the \emph{APT}, \emph{yum} or \emph{zypper} systems on linux, \emph{Xcode} or \emph{Macports} on Mac OSX, or \emph{Cygwin} or \emph{tdm-gcc/msys} under windows. Being able to compile a program file to produce an executable binary (under windows `EXE') that consists only of \texttt{int main() \{\} } is a definite prerequisite. @@ -1907,7 +1921,7 @@ Once this is done, you can download the latest source code from the website, unzip it, and then run \texttt{./configure \&\& make}. This builds the program. You can now modify any of the files, then recompile it simply running \texttt{make}. By examining the options listed by \texttt{./configure --help}, the configuration of the program can be altered to some extent (\emph{e.g.}, enable/disable debug checks, or computational parallelism). \subsubsection{Changing stuff} -As \emph{3Depict} is open source, it can be modified in the case any error fixes, extentions or other alterations to the program are desired. However, a certain level of prerequisite knowledge is necessary to effectively alter the program. If altering code in \emph{3Depict}, You should be familiar with C++, as well as compiling multi-file programs. Depending upon the modification, you may need to have some familiarity with the mathematical problems you need to solve and with libraries used by \emph{3Depict}, such as OpenGL or wxWidgets. Instructions on how to compile for the various platforms is given on the website. However, due to the changing nature of these platforms, no guarantees that compilation will be successful can be given, when following these instructions -- some debugging of the process may be required. +As \emph{3Depict} is open source, it can be modified in the case any error fixes, extensions or other alterations to the program are desired. However, a certain level of prerequisite knowledge is necessary to effectively alter the program. If altering code in \emph{3Depict}, You should be familiar with C++, as well as compiling multi-file programs. Depending upon the modification, you may need to have some familiarity with the mathematical problems you need to solve and with libraries used by \emph{3Depict}, such as OpenGL or wxWidgets. Instructions on how to compile for the various platforms is given on the website. However, due to the changing nature of these platforms, no guarantees that compilation will be successful can be given, when following these instructions -- some debugging of the process may be required. The internal structure of the program can be more easily seen from the Doxygen documentation, which is listed online, or can be generated from the source files themselves via the Doxygen tool. If you want to have a play around with the code, try getting it to compile first, before trying to change anything. Feel free to drop us a line on the website to ask about the change you want to make, and how it could be most easily achieved in the code. diff -Nru 3depict-0.0.19-1/docs/manual-latex/manual.toc 3depict-0.0.20/docs/manual-latex/manual.toc --- 3depict-0.0.19-1/docs/manual-latex/manual.toc 2016-05-31 02:21:57.000000000 +0000 +++ 3depict-0.0.20/docs/manual-latex/manual.toc 2017-02-05 00:04:30.000000000 +0000 @@ -64,34 +64,35 @@ \contentsline {paragraph}{Radial Distribution:}{31}{section*.4} \contentsline {paragraph}{Axial Distribution:}{32}{section*.5} \contentsline {paragraph}{Binomial:}{32}{section*.6} -\contentsline {paragraph}{Point em/re-placement}{32}{section*.7} -\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{32}{subsubsection.5.2.10} +\contentsline {paragraph}{Point em/re-placement :}{32}{section*.7} +\contentsline {paragraph}{Local concentration :}{32}{section*.8} +\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{33}{subsubsection.5.2.10} \contentsline {subsubsection}{\numberline {5.2.11}External Program}{34}{subsubsection.5.2.11} -\contentsline {paragraph}{Command syntax: }{34}{section*.8} -\contentsline {paragraph}{Prior to program execution:}{34}{section*.9} -\contentsline {paragraph}{After program execution:}{34}{section*.10} +\contentsline {paragraph}{Command syntax: }{34}{section*.9} +\contentsline {paragraph}{Prior to program execution:}{34}{section*.10} +\contentsline {paragraph}{After program execution:}{35}{section*.11} \contentsline {subsubsection}{\numberline {5.2.12}Annotation}{35}{subsubsection.5.2.12} -\contentsline {paragraph}{Text}{35}{section*.11} -\contentsline {paragraph}{Arrow, Arrow with Text}{35}{section*.12} -\contentsline {paragraph}{Angle Measurement}{35}{section*.13} +\contentsline {paragraph}{Text}{35}{section*.12} +\contentsline {paragraph}{Arrow, Arrow with Text}{35}{section*.13} +\contentsline {paragraph}{Angle Measurement}{35}{section*.14} \contentsline {subsubsection}{\numberline {5.2.13}Voxels}{36}{subsubsection.5.2.13} \contentsline {subsubsection}{\numberline {5.2.14}Ion Colour}{37}{subsubsection.5.2.14} -\contentsline {subsubsection}{\numberline {5.2.15}Ion Transform}{37}{subsubsection.5.2.15} +\contentsline {subsubsection}{\numberline {5.2.15}Ion Transform}{38}{subsubsection.5.2.15} \contentsline {section}{\numberline {6}Attributions}{38}{section.6} -\contentsline {section}{\numberline {7}Licence}{38}{section.7} -\contentsline {section}{\numberline {8}Appendices}{38}{section.8} -\contentsline {subsection}{\numberline {8.1}Paths}{38}{subsection.8.1} +\contentsline {section}{\numberline {7}Licence}{39}{section.7} +\contentsline {section}{\numberline {8}Appendices}{39}{section.8} +\contentsline {subsection}{\numberline {8.1}Paths}{39}{subsection.8.1} \contentsline {subsection}{\numberline {8.2}File formats}{39}{subsection.8.2} \contentsline {subsubsection}{\numberline {8.2.1}State file}{39}{subsubsection.8.2.1} \contentsline {subsubsection}{\numberline {8.2.2}Range files}{40}{subsubsection.8.2.2} \contentsline {subsubsection}{\numberline {8.2.3}POS files}{41}{subsubsection.8.2.3} \contentsline {subsubsection}{\numberline {8.2.4}Text files}{41}{subsubsection.8.2.4} -\contentsline {subsection}{\numberline {8.3}External Program Examples}{41}{subsection.8.3} +\contentsline {subsection}{\numberline {8.3}External Program Examples}{42}{subsection.8.3} \contentsline {subsubsection}{\numberline {8.3.1}Scilab}{42}{subsubsection.8.3.1} \contentsline {subsubsection}{\numberline {8.3.2}Python}{46}{subsubsection.8.3.2} \contentsline {subsubsection}{\numberline {8.3.3}Bash}{48}{subsubsection.8.3.3} \contentsline {subsubsection}{\numberline {8.3.4}C/C++}{49}{subsubsection.8.3.4} \contentsline {subsection}{\numberline {8.4}Modifying the program}{54}{subsection.8.4} \contentsline {subsubsection}{\numberline {8.4.1}Development tools}{54}{subsubsection.8.4.1} -\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{54}{subsubsection.8.4.2} +\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{55}{subsubsection.8.4.2} \contentsline {subsubsection}{\numberline {8.4.3}Changing stuff}{55}{subsubsection.8.4.3} diff -Nru 3depict-0.0.19-1/docs/TODO 3depict-0.0.20/docs/TODO --- 3depict-0.0.19-1/docs/TODO 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/docs/TODO 2017-01-14 09:49:18.000000000 +0000 @@ -0,0 +1,117 @@ +TODO List - worlds simplest bugtracking system + +--Packaging-- + +--Main app-- + To Implement: + == Next version == + * Fix animation under windows, seems to crash + + == Eventually == + * XML file loading is a bit iffy if paths are moved + around. A nice convenience feature would be to have an + option to scan for the files in a relative manner if + they are not found using the absolute path + * There is no way to get a mass spectrum from clusters with background. + - Import clustering w background from posgen? + * Voxelisation filter should not show ions disabled in upstream range + * VTK voxel data export UI + * Mesh generation/operation? + - This is tricky. I don't have a good mesh library + * Proxigram? + * Update to qhull 2015's qhull_r (reentrant qhull). + - This requires some refactoring of the doHull wrapper for convex hull computation + * Voxel export dialog + * OPS and other 3DAP formats reader? + * Polynomial error estimator in graph + * Shear-warp volume render mode for voxels + - This can be broken into two useful stages + (1) transfer function editor, could be tested with point cloud mode + (2) Volume render code (check out SMVIS, Author gave perm. under GPLv3+) + * Ion exchange/explode filter + * DTD (Document type descriptor) for state files, to + specify a consistent statefile structure + - How to ensure version compatibility in future + state files? + * Voxelisation filter needs progress + * Better progress during cluster ranging + * Billboard text + * Camera animation control (slerp?) + * Range file drag/drop ignores drop coordinates; this could be useful + in trying to interpret where the user wants to drop the object + * Plots cannot currently be updated on name change. Need to add "needUpdate" to setUserString + * Isotope overlay in normal spectra + - Include full atomic species eg 57^Fe18^O in label, and charge state + * Poisson error estimation + + Outstanding bugs: + == Next release== + * There is a nasty crash bug in spatial analysis, when using local concentration mode or binomial + - Related to how ionSourceEnabled and ionTargetEnabeld are computed. These + are not the same size as the rangefile's number of ions at this time + * Under windows there is a problem with parsing the rss feed. This results in a user-visible error + + == Eventually== + * Cluster filter wont save state correctly if parent + rangefile has disabled ions. It will output incorrect + number of enabled ions, and get wiped during next ::initFilter + * Lighting calculations on isosurfaces can be problematic. See example package + * Select an X-Y crop, camera coords, on a dataset, + then view target (-9.14237,-0.995174,83.2904) origin + (188.23,-0.995174,83.2904). Now press ctrl+space. Note + dataset disappears until mouse motion. This is due to + camera up vector not being updated, I suspect. + * 3D Text bounding boxes are wrong. + + OSX: + * drag drop not working? + + == Needs reproducing == + + Auditing: + == Next release == + + Performance: + * Scene is sometimes continuously refreshed during post effects, causing CPU usage + to max out. + * Clipping sphere/cylinder does BB test? (only useful if we have bb cache) + * Pos limit loader could alter its behaviour when + sampling rates some percentage to be determined (load + file, skip buffer). + * Clustering can now be paralellised. + * Examine performance characteristics of HULL_GRAB in ioninfo + * Conversion of double axis-angle rotations to single axis angle rotations - any value here? + - Use TRIAD/ Wahba's problem to solve. Should be a lot faster? + + Misc: + + +-- Refactor/cleanup -- + * read/write xml could have default reader/writer routines + Variables could be registered, then an order independant parser + could be used to "vacuum" most of the data. Bounds/corretness + checking could be used thereafter, and fallback to traditional + xml tree traversal could be done after that + * Plotting code is a nightmare. Data model for plot.h is not + very well thought out, leading to large duplication, and elaborate special-case-ing + - Plots need log/non-log axes + - Plots need to be connected/disconnected + - Plots need to be able to specify bounding boxes separate from their data + - This would aid things like bar plots, pie charts + - Plots need to be able to set strings/legends + - There is little diference between plot1D and plot2D, really. + - Error bar handling is a bit of a hack. Error generation should be moved to filters + * work out which inline FIXMEs and TODOs are still valid, and need attention + * K3DTree currently requires public access to members of boundcube + * Enums should be, where possible, moved into their relevant class' namespace + * Better error code behaviour for filters. There is a lot of needless duplication + * There is a confusion of responsibility between filter.{cpp,h} and filterCommon.{cpp,h} + - what is the division here? this is unclear + +-- Deprecate -- + * On Minor version change: + - DataLoadFilter::readState(...) -> doSample test for statefiles without doSample. + - 3Depict versions prior to 1207:2a01b7e83d75 + - VoxeliseFilter::readState(...) -> axial slice read will be silently skipped if it is missing + - 3Depict versions <= 1628:ffa0b851e966 don't know about this element + - Annotation XML element "sphereanglesize" name doesn't match its purpose, and needs to be renamed "spheremarkersize" Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/locales/de_DE/LC_MESSAGES/3Depict.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/locales/de_DE/LC_MESSAGES/3Depict.mo differ Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/locales/es_ES/LC_MESSAGES/3Depict.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/locales/es_ES/LC_MESSAGES/3Depict.mo differ Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/locales/fr_FR/LC_MESSAGES/3Depict.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/locales/fr_FR/LC_MESSAGES/3Depict.mo differ diff -Nru 3depict-0.0.19-1/m4/ax_compiler_vendor.m4 3depict-0.0.20/m4/ax_compiler_vendor.m4 --- 3depict-0.0.19-1/m4/ax_compiler_vendor.m4 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/m4/ax_compiler_vendor.m4 2017-01-27 00:15:49.000000000 +0000 @@ -0,0 +1,87 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPILER_VENDOR +# +# DESCRIPTION +# +# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, +# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, +# watcom, etc. The vendor is returned in the cache variable +# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2008 Matteo Frigo +# +# 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 3 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, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 15 + +AC_DEFUN([AX_COMPILER_VENDOR], +[AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, + dnl Please add if possible support to ax_compiler_version.m4 + [# note: don't check for gcc first since some other compilers define __GNUC__ + vendors="intel: __ICC,__ECC,__INTEL_COMPILER + ibm: __xlc__,__xlC__,__IBMC__,__IBMCPP__ + pathscale: __PATHCC__,__PATHSCALE__ + clang: __clang__ + cray: _CRAYC + fujitsu: __FUJITSU + gnu: __GNUC__ + sun: __SUNPRO_C,__SUNPRO_CC + hp: __HP_cc,__HP_aCC + dec: __DECC,__DECCXX,__DECC_VER,__DECCXX_VER + borland: __BORLANDC__,__CODEGEARC__,__TURBOC__ + comeau: __COMO__ + kai: __KCC + lcc: __LCC__ + sgi: __sgi,sgi + microsoft: _MSC_VER + metrowerks: __MWERKS__ + watcom: __WATCOMC__ + portland: __PGI + tcc: __TINYC__ + unknown: UNKNOWN" + for ventest in $vendors; do + case $ventest in + *:) vendor=$ventest; continue ;; + *) vencpp="defined("`echo $ventest | sed 's/,/) || defined(/g'`")" ;; + esac + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ + #if !($vencpp) + thisisanerror; + #endif + ])], [break]) + done + ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=`echo $vendor | cut -d: -f1` + ]) +]) diff -Nru 3depict-0.0.19-1/m4/ax_compiler_version.m4 3depict-0.0.20/m4/ax_compiler_version.m4 --- 3depict-0.0.19-1/m4/ax_compiler_version.m4 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/m4/ax_compiler_version.m4 2017-01-27 00:15:49.000000000 +0000 @@ -0,0 +1,492 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compiler_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPILER_VERSION +# +# DESCRIPTION +# +# This macro retrieves the compiler version and returns it in the cache +# variable $ax_cv_c_compiler_version for C and $ax_cv_cxx_compiler_version +# for C++. +# +# Version is returned as epoch:major.minor.patchversion +# +# Epoch is used in order to have an increasing version number in case of +# marketing change. +# +# Epoch use: * borland compiler use chronologically 0turboc for turboc +# era, +# +# 1borlanc BORLANC++ before 5, 2cppbuilder for cppbuilder era, +# 3borlancpp for return of BORLANC++ (after version 5.5), +# 4cppbuilder for cppbuilder with year version, +# and 5xe for XE era. +# +# An empty string is returned otherwise. +# +# LICENSE +# +# Copyright (c) 2014 Bastien ROUCARIES +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 4 + +# for intel +AC_DEFUN([_AX_COMPILER_VERSION_INTEL], + [ dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [__INTEL_COMPILER/100],, + AC_MSG_FAILURE([[[$0]] unknown intel compiler version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [(__INTEL_COMPILER%100)/10],, + AC_MSG_FAILURE([[[$0]] unknown intel compiler version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [(__INTEL_COMPILER%10)],, + AC_MSG_FAILURE([[[$0]] unknown intel compiler version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# for IBM +AC_DEFUN([_AX_COMPILER_VERSION_IBM], + [ dnl + dnl check between z/OS C/C++ and XL C/C++ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([], + [ + #if defined(__COMPILER_VER__) + choke me; + #endif + ])], + [ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [__xlC__/100],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler major version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [__xlC__%100],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__xlC_ver__/0x100],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_build, + [__xlC_ver__%0x100],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler build version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_build" + ], + [ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__xlC__%1000],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [(__xlC__/10000)%10],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [(__xlC__/100000)%10],, + AC_MSG_FAILURE([[[$0]] unknown IBM compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) +]) + +# for pathscale +AC_DEFUN([_AX_COMPILER_VERSION_PATHSCALE],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + __PATHCC__,, + AC_MSG_FAILURE([[[$0]] unknown pathscale major])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + __PATHCC_MINOR__,, + AC_MSG_FAILURE([[[$0]] unknown pathscale minor])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__PATHCC_PATCHLEVEL__],, + AC_MSG_FAILURE([[[$0]] unknown pathscale patch level])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# for clang +AC_DEFUN([_AX_COMPILER_VERSION_CLANG],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + __clang_major__,, + AC_MSG_FAILURE([[[$0]] unknown clang major])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + __clang_minor__,, + AC_MSG_FAILURE([[[$0]] unknown clang minor])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__clang_patchlevel__],,0) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# for crayc +AC_DEFUN([_AX_COMPILER_VERSION_CRAY],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + _RELEASE,, + AC_MSG_FAILURE([[[$0]] unknown crayc release])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + _RELEASE_MINOR,, + AC_MSG_FAILURE([[[$0]] unknown crayc minor])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor" + ]) + +# for fujitsu +AC_DEFUN([_AX_COMPILER_VERSION_FUJITSU],[ + AC_COMPUTE_INT(ax_cv_[]_AC_LANG_ABBREV[]_compiler_version, + __FCC_VERSION,, + AC_MSG_FAILURE([[[$0]]unknown fujitsu release])) + ]) + +# for GNU +AC_DEFUN([_AX_COMPILER_VERSION_GNU],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + __GNUC__,, + AC_MSG_FAILURE([[[$0]] unknown gcc major])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + __GNUC_MINOR__,, + AC_MSG_FAILURE([[[$0]] unknown gcc minor])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__GNUC_PATCHLEVEL__],, + AC_MSG_FAILURE([[[$0]] unknown gcc patch level])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# For sun +AC_DEFUN([_AX_COMPILER_VERSION_SUN],[ + m4_define([_AX_COMPILER_VERSION_SUN_NUMBER], + [ + #if defined(__SUNPRO_CC) + __SUNPRO_CC + #else + __SUNPRO_C + #endif + ]) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_until59, + !!(_AX_COMPILER_VERSION_SUN_NUMBER < 0x1000),, + AC_MSG_FAILURE([[[$0]] unknown sun release version])) + AS_IF([test "X$_ax_[]_AC_LANG_ABBREV[]_compiler_version_until59" = X1], + [dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + _AX_COMPILER_VERSION_SUN_NUMBER % 0x10,, + AC_MSG_FAILURE([[[$0]] unknown sun patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + (_AX_COMPILER_VERSION_SUN_NUMBER / 0x10) % 0x10,, + AC_MSG_FAILURE([[[$0]] unknown sun minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (_AX_COMPILER_VERSION_SUN_NUMBER / 0x100),, + AC_MSG_FAILURE([[[$0]] unknown sun major version])) + ], + [dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + _AX_COMPILER_VERSION_SUN_NUMBER % 0x10,, + AC_MSG_FAILURE([[[$0]] unknown sun patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + (_AX_COMPILER_VERSION_SUN_NUMBER / 0x100) % 0x100,, + AC_MSG_FAILURE([[[$0]] unknown sun minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (_AX_COMPILER_VERSION_SUN_NUMBER / 0x1000),, + AC_MSG_FAILURE([[[$0]] unknown sun major version])) + ]) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" +]) + +AC_DEFUN([_AX_COMPILER_VERSION_HP],[ + m4_define([_AX_COMPILER_VERSION_HP_NUMBER], + [ + #if defined(__HP_cc) + __HP_cc + #else + __HP_aCC + #endif + ]) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_untilA0121, + !!(_AX_COMPILER_VERSION_HP_NUMBER <= 1),, + AC_MSG_FAILURE([[[$0]] unknown hp release version])) + AS_IF([test "X$_ax_[]_AC_LANG_ABBREV[]_compiler_version_untilA0121" = X1], + [dnl By default output last version with this behavior. + dnl it is so old + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="01.21.00" + ], + [dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + (_AX_COMPILER_VERSION_HP_NUMBER % 100),, + AC_MSG_FAILURE([[[$0]] unknown hp release version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + ((_AX_COMPILER_VERSION_HP_NUMBER / 100)%100),, + AC_MSG_FAILURE([[[$0]] unknown hp minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + ((_AX_COMPILER_VERSION_HP_NUMBER / 10000)%100),, + AC_MSG_FAILURE([[[$0]] unknown hp major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) +]) + +AC_DEFUN([_AX_COMPILER_VERSION_DEC],[dnl + m4_define([_AX_COMPILER_VERSION_DEC_NUMBER], + [ + #if defined(__DECC_VER) + __DECC_VER + #else + __DECCXX_VER + #endif + ]) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + (_AX_COMPILER_VERSION_DEC_NUMBER % 10000),, + AC_MSG_FAILURE([[[$0]] unknown dec release version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + ((_AX_COMPILER_VERSION_DEC_NUMBER / 100000UL)%100),, + AC_MSG_FAILURE([[[$0]] unknown dec minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + ((_AX_COMPILER_VERSION_DEC_NUMBER / 10000000UL)%100),, + AC_MSG_FAILURE([[[$0]] unknown dec major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# borland +AC_DEFUN([_AX_COMPILER_VERSION_BORLAND],[dnl + m4_define([_AX_COMPILER_VERSION_TURBOC_NUMBER], + [ + #if defined(__TURBOC__) + __TURBOC__ + #else + choke me + #endif + ]) + m4_define([_AX_COMPILER_VERSION_BORLANDC_NUMBER], + [ + #if defined(__BORLANDC__) + __BORLANDC__ + #else + __CODEGEARC__ + #endif + ]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM(, + _AX_COMPILER_VERSION_TURBOC_NUMBER)], + [dnl TURBOC + AC_COMPUTE_INT( + _ax_[]_AC_LANG_ABBREV[]_compiler_version_turboc_raw, + _AX_COMPILER_VERSION_TURBOC_NUMBER,, + AC_MSG_FAILURE([[[$0]] unknown turboc version])) + AS_IF( + [test $_ax_[]_AC_LANG_ABBREV[]_compiler_version_turboc_raw -lt 661 || test $_ax_[]_AC_LANG_ABBREV[]_compiler_version_turboc_raw -gt 1023], + [dnl compute normal version + AC_COMPUTE_INT( + _ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + _AX_COMPILER_VERSION_TURBOC_NUMBER % 0x100,, + AC_MSG_FAILURE([[[$0]] unknown turboc minor version])) + AC_COMPUTE_INT( + _ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (_AX_COMPILER_VERSION_TURBOC_NUMBER/0x100)%0x100,, + AC_MSG_FAILURE([[[$0]] unknown turboc major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="0turboc:$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor"], + [dnl special version + AS_CASE([$_ax_[]_AC_LANG_ABBREV[]_compiler_version_turboc_raw], + [661],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="0turboc:1.00"], + [662],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="0turboc:1.01"], + [663],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="0turboc:2.00"], + [ + AC_MSG_WARN([[[$0]] unknown turboc version between 0x295 and 0x400 please report bug]) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="" + ]) + ]) + ], + # borlandc + [ + AC_COMPUTE_INT( + _ax_[]_AC_LANG_ABBREV[]_compiler_version_borlandc_raw, + _AX_COMPILER_VERSION_BORLANDC_NUMBER,, + AC_MSG_FAILURE([[[$0]] unknown borlandc version])) + AS_CASE([$_ax_[]_AC_LANG_ABBREV[]_compiler_version_borlandc_raw], + dnl BORLANC++ before 5.5 + [512] ,[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:2.00"], + [1024],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:3.00"], + [1024],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:3.00"], + [1040],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:3.1"], + [1106],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:4.0"], + [1280],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:5.0"], + [1312],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="1borlanc:5.02"], + dnl C++ Builder era + [1328],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="2cppbuilder:3.0"], + [1344],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="2cppbuilder:4.0"], + dnl BORLANC++ after 5.5 + [1360],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="3borlancpp:5.5"], + [1361],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="3borlancpp:5.51"], + [1378],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="3borlancpp:5.6.4"], + dnl C++ Builder with year number + [1392],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="4cppbuilder:2006"], + [1424],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="4cppbuilder:2007"], + [1555],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="4cppbuilder:2009"], + [1569],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="4cppbuilder:2010"], + dnl XE version + [1584],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="5xe"], + [1600],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="5xe:2"], + [1616],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="5xe:3"], + [1632],[ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="5xe:4"], + [ + AC_MSG_WARN([[[$0]] Unknow borlanc compiler version $_ax_[]_AC_LANG_ABBREV[]_compiler_version_borlandc_raw please report bug]) + ]) + ]) + ]) + +# COMO +AC_DEFUN([_AX_COMPILER_VERSION_COMEAU], + [ dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [__COMO_VERSION__%100],, + AC_MSG_FAILURE([[[$0]] unknown comeau compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [(__COMO_VERSION__/100)%10],, + AC_MSG_FAILURE([[[$0]] unknown comeau compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor" + ]) + +# KAI +AC_DEFUN([_AX_COMPILER_VERSION_KAI],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__KCC_VERSION%100],, + AC_MSG_FAILURE([[[$0]] unknown kay compiler patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [(__KCC_VERSION/100)%10],, + AC_MSG_FAILURE([[[$0]] unknown kay compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [(__KCC_VERSION/1000)%10],, + AC_MSG_FAILURE([[[$0]] unknown kay compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +dnl LCC +dnl LCC does not output version... + +# SGI +AC_DEFUN([_AX_COMPILER_VERSION_SGI],[ + m4_define([_AX_COMPILER_VERSION_SGI_NUMBER], + [ + #if defined(_COMPILER_VERSION) + _COMPILER_VERSION + #else + _SGI_COMPILER_VERSION + #endif + ]) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [_AX_COMPILER_VERSION_SGI_NUMBER%10],, + AC_MSG_FAILURE([[[$0]] unknown SGI compiler patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + [(_AX_COMPILER_VERSION_SGI_NUMBER/10)%10],, + AC_MSG_FAILURE([[[$0]] unknown SGI compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + [(_AX_COMPILER_VERSION_SGI_NUMBER/100)%10],, + AC_MSG_FAILURE([[[$0]] unknown SGI compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# microsoft +AC_DEFUN([_AX_COMPILER_VERSION_MICROSOFT],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + _MSC_VER%100,, + AC_MSG_FAILURE([[[$0]] unknown microsoft compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (_MSC_VER/100)%100,, + AC_MSG_FAILURE([[[$0]] unknown microsoft compiler major version])) + dnl could be overriden + _ax_[]_AC_LANG_ABBREV[]_compiler_version_patch=0 + _ax_[]_AC_LANG_ABBREV[]_compiler_version_build=0 + # special case for version 6 + AS_IF([test "X$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major" = "X12"], + [AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + _MSC_FULL_VER%1000,, + _ax_[]_AC_LANG_ABBREV[]_compiler_version_patch=0)]) + # for version 7 + AS_IF([test "X$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major" = "X13"], + [AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + _MSC_FULL_VER%1000,, + AC_MSG_FAILURE([[[$0]] unknown microsoft compiler patch version])) + ]) + # for version > 8 + AS_IF([test $_ax_[]_AC_LANG_ABBREV[]_compiler_version_major -ge 14], + [AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + _MSC_FULL_VER%10000,, + AC_MSG_FAILURE([[[$0]] unknown microsoft compiler patch version])) + ]) + AS_IF([test $_ax_[]_AC_LANG_ABBREV[]_compiler_version_major -ge 15], + [AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_build, + _MSC_BUILD,, + AC_MSG_FAILURE([[[$0]] unknown microsoft compiler build version])) + ]) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_build" + ]) + +# for metrowerks +AC_DEFUN([_AX_COMPILER_VERSION_METROWERKS],[dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + __MWERKS__%0x100,, + AC_MSG_FAILURE([[[$0]] unknown metrowerks compiler patch version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + (__MWERKS__/0x100)%0x10,, + AC_MSG_FAILURE([[[$0]] unknown metrowerks compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (__MWERKS__/0x1000)%0x10,, + AC_MSG_FAILURE([[[$0]] unknown metrowerks compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# for watcom +AC_DEFUN([_AX_COMPILER_VERSION_WATCOM],[dnl + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + __WATCOMC__%100,, + AC_MSG_FAILURE([[[$0]] unknown watcom compiler minor version])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + (__WATCOMC__/100)%100,, + AC_MSG_FAILURE([[[$0]] unknown watcom compiler major version])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor" + ]) + +# for PGI +AC_DEFUN([_AX_COMPILER_VERSION_PORTLAND],[ + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_major, + __PGIC__,, + AC_MSG_FAILURE([[[$0]] unknown pgi major])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor, + __PGIC_MINOR__,, + AC_MSG_FAILURE([[[$0]] unknown pgi minor])) + AC_COMPUTE_INT(_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch, + [__PGIC_PATCHLEVEL__],, + AC_MSG_FAILURE([[[$0]] unknown pgi patch level])) + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version="$_ax_[]_AC_LANG_ABBREV[]_compiler_version_major.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_minor.$_ax_[]_AC_LANG_ABBREV[]_compiler_version_patch" + ]) + +# tcc +AC_DEFUN([_AX_COMPILER_VERSION_TCC],[ + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version=[`tcc -v | $SED 's/^[ ]*tcc[ ]\+version[ ]\+\([0-9.]\+\).*/\1/g'`] + ]) +# main entry point +AC_DEFUN([AX_COMPILER_VERSION],[dnl + AC_REQUIRE([AX_COMPILER_VENDOR]) + AC_REQUIRE([AC_PROG_SED]) + AC_CACHE_CHECK([for _AC_LANG compiler version], + ax_cv_[]_AC_LANG_ABBREV[]_compiler_version, + [ dnl + AS_CASE([$ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor], + [intel],[_AX_COMPILER_VERSION_INTEL], + [ibm],[_AX_COMPILER_VERSION_IBM], + [pathscale],[_AX_COMPILER_VERSION_PATHSCALE], + [clang],[_AX_COMPILER_VERSION_CLANG], + [cray],[_AX_COMPILER_VERSION_CRAY], + [fujitsu],[_AX_COMPILER_VERSION_FUJITSU], + [gnu],[_AX_COMPILER_VERSION_GNU], + [sun],[_AX_COMPILER_VERSION_SUN], + [hp],[_AX_COMPILER_VERSION_HP], + [dec],[_AX_COMPILER_VERSION_DEC], + [borland],[_AX_COMPILER_VERSION_BORLAND], + [comeau],[_AX_COMPILER_VERSION_COMEAU], + [kai],[_AX_COMPILER_VERSION_KAI], + [sgi],[_AX_COMPILER_VERSION_SGI], + [microsoft],[_AX_COMPILER_VERSION_MICROSOFT], + [metrowerks],[_AX_COMPILER_VERSION_METROWERKS], + [watcom],[_AX_COMPILER_VERSION_WATCOM], + [portland],[_AX_COMPILER_VERSION_PORTLAND], + [tcc],[_AX_COMPILER_VERSION_TCC], + [ax_cv_[]_AC_LANG_ABBREV[]_compiler_version=""]) + ]) +]) diff -Nru 3depict-0.0.19-1/Makefile.in 3depict-0.0.20/Makefile.in --- 3depict-0.0.19-1/Makefile.in 2016-05-31 01:40:11.000000000 +0000 +++ 3depict-0.0.20/Makefile.in 2017-02-05 00:09:54.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# 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, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +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 \ ?) ;; \ @@ -78,18 +88,17 @@ build_triplet = @build@ host_triplet = @host@ subdir = . -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in AUTHORS COPYING ChangeLog INSTALL NEWS \ - README TODO compile config.guess config.rpath config.sub \ - depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ + $(top_srcdir)/m4/ax_compiler_version.m4 \ + $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/wxwin.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/m4/ax_compare_version.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d @@ -153,6 +162,10 @@ CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ + COPYING ChangeLog INSTALL NEWS README TODO compile \ + config.guess config.rpath config.sub depcomp install-sh \ + missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -263,6 +276,7 @@ QHULL_CFLAGS = @QHULL_CFLAGS@ QHULL_LIBS = @QHULL_LIBS@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -323,6 +337,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -353,7 +368,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -575,15 +589,15 @@ $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @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 $(am__post_remove_distdir) @@ -619,17 +633,17 @@ esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -804,6 +818,8 @@ mostlyclean-generic pdf pdf-am ps ps-am tags 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. diff -Nru 3depict-0.0.19-1/packaging/debian/changelog 3depict-0.0.20/packaging/debian/changelog --- 3depict-0.0.19-1/packaging/debian/changelog 2016-05-31 02:48:54.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/changelog 2017-01-21 12:43:39.000000000 +0000 @@ -1,14 +1,25 @@ -3depict (0.0.19-1) unstable; urgency=medium +3depict (0.0.19-1) unstable; urgency=low - * + * Update to upstream 0.0.19 (Closes: #831200) + * Update GSL build dependency (Closes: #807232) + * Minor lintian fixes to copyright, menu + * Fix build with autoconf != autoconf-1.14 - -- D Haley Tue, 31 May 2016 12:00:39 +1000 + -- D Haley Thu, 04 Aug 2016 00:21:09 +0200 + +3depict (0.0.18-2) unstable; urgency=medium + + [ Edmund Grimley Evans ] + * Team upload. + * [f3c653d] Use autotools-dev. (Closes: #787214) + + -- Anton Gladky Fri, 29 May 2015 21:38:04 +0200 3depict (0.0.18-1) unstable; urgency=medium - * Update to upstream 0.0.17 + * Update to upstream 0.0.18 - -- D Haley Sun, 26 Apr 2014 12:00:00 +0100 + -- D Haley Fri, 01 May 2015 23:59:48 +0200 3depict (0.0.17-1) unstable; urgency=medium diff -Nru 3depict-0.0.19-1/packaging/debian/control 3depict-0.0.20/packaging/debian/control --- 3depict-0.0.19-1/packaging/debian/control 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/control 2017-01-21 12:43:39.000000000 +0000 @@ -1,21 +1,34 @@ Source: 3depict -Section: science -Priority: optional Maintainer: Debian Science Maintainers Uploaders: D Haley -Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1~), libgl1-mesa-dev | libgl-dev, libpng-dev | libpng15-dev, libqhull-dev, libwxgtk3.0-dev, libftgl-dev, libxml2-dev, libmgl-dev (>= 2.0), automake -Standards-Version: 3.9.5 -Homepage: http://threedepict.sourceforge.net/index.html +Section: science +Priority: optional +Build-Depends: debhelper (>= 9), + dh-autoreconf (>=9), + dpkg-dev (>= 1.16.1~), + libgl1-mesa-dev | libgl-dev, + libpng-dev | libpng15-dev, + libqhull-dev, + libwxgtk3.0-dev, + libgsl-dev, + libftgl-dev, + libxml2-dev, + libmgl-dev (>= 2.0), + libvigraimpex-dev, + automake, + autotools-dev, + pkg-config +Standards-Version: 3.9.8 +Vcs-Browser: https://anonscm.debian.org/cgit/debian-science/packages/3depict.git Vcs-Git: git://anonscm.debian.org/debian-science/packages/3depict.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=debian-science/packages/3depict.git - +Homepage: http://threedepict.sourceforge.net/index.html Package: 3depict Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, + ${misc:Depends} Description: visualisation and analysis for single valued point data This program provides a graphical interface for the scientific analysis of real valued point data (x,y,z,value). This is primarily targeted towards Atom probe tomography applications, but may prove useful to other applications as well. - diff -Nru 3depict-0.0.19-1/packaging/debian/copyright 3depict-0.0.20/packaging/debian/copyright --- 3depict-0.0.19-1/packaging/debian/copyright 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/copyright 2017-01-21 12:43:39.000000000 +0000 @@ -5,12 +5,10 @@ Files: * Copyright: 3Depict is Copyright (C) 2013 by D Haley. License: GPL-3+ - On Debian systems the full text of the GNU General Public License v3 - can be found in the `/usr/share/common-licenses/GPL-3' file. Files: docs/manual-latex/manual.tex Copyright: Copyright (C) 2013 by D Haley. -License: CC-BY-SA 3.0 +License: CC-BY-SA-3.0 The work (as defined below) is provided under the terms of this creative commons public license ("CCPL"; or "license"). The work is protected by copyright and/or other applicable law. any use of the work other than as @@ -21,12 +19,6 @@ contained here in consideration of your acceptance of such terms and conditions. -Files: debian/* -Copyright: Copyright 2013, D Haley -License: GPL-3+ - On Debian systems the full text of the GNU General Public License v3 - can be found in the `/usr/share/common-licenses/GPL-3' file. - Files:data/textures/*rrow*png data/textures/*rrow*svg data/textures/tex-source/*rrow*svg data/textures/*enlarge*png data/textures/tex-source/*enlarge.svg Copyright: Copyright 2006, Everaldo Coelho Source: https://commons.wikimedia.org/wiki/Crystal_clear @@ -41,30 +33,27 @@ On Debian systems the full text of the GNU Free Documentation License v1.2 can be found in the `/usr/share/common-licenses/GFDL-1.2' file. -Files: data/textures/tex-source/*phere.svg data/textures/tex-source/*phere.png -Copyright: Copyright 2003-2004, David Vignoni -Source: www.icon-king.com/projects/nuvola// -License: LGPL-2+ - On Debian systems the full text of the Lesser GNU General Public License - v2 can be found in the `/usr/share/common-licenses/LGPL-2' file. - Files: docs/web/style.css Copyright: Copyright 2006, Minamalistic-design Source: http://www.minimalistic-design.com/minimalistic.zip License: GPL-2+ - On Debian systems the full text of the Lesser GNU General Public License - v2 can be found in the `/usr/share/common-licenses/LGPL-2' file. Files: src/gl/tr.cpp src/gl/tr.h Copyright: Copyright 2005, Brian Paul Source: http://www.mesa3d.org/brianp/TR.html License: GPL-2+ - On Debian systems the full text of the GNU General Public License v2 - can be found in the `/usr/share/common-licenses/GPL-2' file. Files: data/naturalAbundance.xml Copyright: Copyright 2008, Metamolecular Source: http://metamolecular.com License: expat - On Debian systems the full text of th expat license can be found in the + On Debian systems the full text of the expat license can be found in the `/usr/share/common-licenses/expat' file. + +License: GPL-3+ + On Debian systems the full text of the GNU General Public License v3 + can be found in the `/usr/share/common-licenses/GPL-3' file. + +License: GPL-2+ + On Debian systems the full text of the GNU General Public License v2 + can be found in the `/usr/share/common-licenses/GPL-2' file. diff -Nru 3depict-0.0.19-1/packaging/debian/menu 3depict-0.0.20/packaging/debian/menu --- 3depict-0.0.19-1/packaging/debian/menu 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/menu 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -?package(3depict):needs="X11" section="Applications/Science/Data Analysis"\ - title="3depict" command="/usr/bin/3depict" diff -Nru 3depict-0.0.19-1/packaging/debian/patches/debian-desktop-naming.patch 3depict-0.0.20/packaging/debian/patches/debian-desktop-naming.patch --- 3depict-0.0.19-1/packaging/debian/patches/debian-desktop-naming.patch 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/debian-desktop-naming.patch 2017-01-21 12:43:39.000000000 +0000 @@ -2,8 +2,10 @@ "D" Forwarded: not-needed Author: D Haley ---- 3depict-0.0.16.orig/packaging/3Depict.desktop -+++ 3depict-0.0.16/packaging/3Depict.desktop +Index: 3depict-0.0.16/packaging/3Depict.desktop +=================================================================== +--- 3depict-0.0.16.orig/packaging/3Depict.desktop 2014-04-25 00:52:46.982186432 +0200 ++++ 3depict-0.0.16/packaging/3Depict.desktop 2014-04-25 00:52:46.978186482 +0200 @@ -2,8 +2,8 @@ Version=1.0 Type=Application diff -Nru 3depict-0.0.19-1/packaging/debian/patches/desktop-category.patch 3depict-0.0.20/packaging/debian/patches/desktop-category.patch --- 3depict-0.0.19-1/packaging/debian/patches/desktop-category.patch 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/desktop-category.patch 2017-01-21 12:43:39.000000000 +0000 @@ -0,0 +1,12 @@ +Index: 3depict-0.0.17/packaging/3Depict.desktop +=================================================================== +--- 3depict-0.0.17.orig/packaging/3Depict.desktop 2014-09-28 21:35:04.608268640 +0200 ++++ 3depict-0.0.17/packaging/3Depict.desktop 2014-09-28 21:37:06.472269485 +0200 +@@ -1,6 +1,7 @@ + [Desktop Entry] + Version=1.0 + Type=Application ++Categories=Science;DataVisualization; + Comment=Valued point cloud visualisation and analysis + TryExec=3depict + Exec=3depict %F diff -Nru 3depict-0.0.19-1/packaging/debian/patches/diff_0.0.19_to_effd078610a7 3depict-0.0.20/packaging/debian/patches/diff_0.0.19_to_effd078610a7 --- 3depict-0.0.19-1/packaging/debian/patches/diff_0.0.19_to_effd078610a7 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/diff_0.0.19_to_effd078610a7 2017-01-21 12:43:39.000000000 +0000 @@ -0,0 +1,1235 @@ +diff -r d478204af715 -r effd078610a7 docs/manual-latex/build-latex.sh +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/docs/manual-latex/build-latex.sh Tue Jun 21 12:45:20 2016 +0100 +@@ -0,0 +1,37 @@ ++#!/bin/bash ++LATEXBIN=pdflatex ++BIBTEXBIN=bibtex ++if [ x`which $LATEXBIN` == x"" ] ; then ++ echo "no $LATEXBIN" ++ exit 1 ++fi ++ ++if [ x`which $BIBTEXBIN` == x"" ] ; then ++ echo "no $BIBTEXBIN" ++ exit 1 ++fi ++ ++MANUAL=manual.tex ++ ++#check to see if the manual and its bib file are around ++if [ ! -f $MANUAL ] ; then ++ echo "$MANUAL is missing" ++ exit 1 ++fi ++ ++#Remove the old manul ++rm -f manual.pdf ++ ++ ++ ++#run the multi-pass latex build. ++$LATEXBIN $MANUAL || { echo "failed latex build (pass 1 of 2)"; exit 1 ; } ++$BIBTEXBIN `basename -s .tex $MANUAL` || { echo "failed bibtex build"; exit 1 ; } ++$LATEXBIN $MANUAL || { echo "failed latex build (pass 2 of 2)"; exit 1 ; } ++ ++ ++if [ ! -f manual.pdf ] ; then ++ echo "latex ran, but somehow we did not output the PDF...." ++ exit 1 ++fi ++ +diff -r d478204af715 -r effd078610a7 src/backend/filter.cpp +--- a/src/backend/filter.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filter.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -553,7 +553,7 @@ + ASSERT(scatterIntensity.empty()); + + +- ASSERT(plotType < PLOT_TYPE_ENUM_END); ++ ASSERT(plotStyle < PLOT_TYPE_ENUM_END); + } + void RangeStreamData::checkSelfConsistent() const + { +diff -r d478204af715 -r effd078610a7 src/backend/filter.h +--- a/src/backend/filter.h Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filter.h Tue Jun 21 12:45:20 2016 +0100 +@@ -395,7 +395,7 @@ + //Label for X, Y axes + std::string xLabel,yLabel; + +- unsigned int plotType; ++ unsigned int plotStyle; + + //!Structured XY data pairs for plotting curve + Array2D xyData; +diff -r d478204af715 -r effd078610a7 src/backend/filters/algorithms/rdf.cpp +--- a/src/backend/filters/algorithms/rdf.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/algorithms/rdf.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -862,6 +862,8 @@ + return RDF_ABORT_FAIL; + #endif + ++ *progressPtr=100; ++ + return 0; + } + +@@ -1003,6 +1005,8 @@ + #endif + + //Calculations complete! ++ *progressPtr=100; ++ + return 0; + } + +diff -r d478204af715 -r effd078610a7 src/backend/filters/annotation.cpp +--- a/src/backend/filters/annotation.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/annotation.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -167,8 +167,15 @@ + + //If we are not enabled, do not draw anything into the output + if(!active) ++ { ++ progress.filterProgress=100; + return 0; ++ } + ++ progress.step=1; ++ progress.maxStep=1; ++ progress.stepName=TRANS("Draw"); ++ + DrawStreamData *d; + d = new DrawStreamData; + d->parent=this; +@@ -505,6 +512,7 @@ + d->cached=0; + getOut.push_back(d); + ++ progress.filterProgress=100; + return 0; + } + +diff -r d478204af715 -r effd078610a7 src/backend/filters/boundingBox.cpp +--- a/src/backend/filters/boundingBox.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/boundingBox.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -510,7 +510,6 @@ + } + #endif + bTotal.expand(bThis); +- progress.filterProgress=100; + break; + } + default: +@@ -521,6 +520,7 @@ + getOut.push_back(dataIn[ui]); + } + ++ progress.filterProgress=100; + //Append the bounding box if it is valid + if(bTotal.isValid()) + { +diff -r d478204af715 -r effd078610a7 src/backend/filters/clusterAnalysis.cpp +--- a/src/backend/filters/clusterAnalysis.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/clusterAnalysis.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -685,7 +685,7 @@ + Plot2DStreamData *p = new Plot2DStreamData; + p->parent=this; + +- p->plotType=PLOT_2D_SCATTER; ++ p->plotStyle=PLOT_2D_SCATTER; + p->dataLabel=TRANS("Morphology Plot"); + p->xLabel=TRANS("\\lambda_1:\\lambda_2 ratio"); + p->yLabel=TRANS("\\lambda_2:\\lambda_3 ratio"); +diff -r d478204af715 -r effd078610a7 src/backend/filters/ionColour.cpp +--- a/src/backend/filters/ionColour.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/ionColour.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -271,12 +271,14 @@ + + + p.name=TRANS("Show Bar"); ++ p.helpText=TRANS("Display the colour legend in the 3D view"); + p.key=KEY_IONCOLOURFILTER_SHOWBAR; + p.data=boolStrEnc(showColourBar); + p.type=PROPERTY_TYPE_BOOL; + propertyList.addProperty(p,curGroup); + + p.name=TRANS("Opacity"); ++ p.helpText=TRANS("How see-through to make the legend (0- transparent, 1- solid)"); + p.key=KEY_IONCOLOURFILTER_ALPHA; + stream_cast(p.data,alpha); + p.type=PROPERTY_TYPE_REAL; +diff -r d478204af715 -r effd078610a7 src/backend/filters/ionDownsample.cpp +--- a/src/backend/filters/ionDownsample.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/ionDownsample.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -88,7 +88,7 @@ + rsdIncoming = new RangeStreamData; + *rsdIncoming=*c; + +- if(ionFractions.size() != c->rangeFile->getNumIons()) ++ if(ionFractions.size() != c->rangeFile->getNumIons()+1) + { + //set up some defaults; seeded from normal + ionFractions.resize(c->rangeFile->getNumIons()+1,fraction); +@@ -464,7 +464,8 @@ + + propertyList.setGroupTitle(curGroup,TRANS("Mode")); + curGroup++; +- if(rsdIncoming && perSpecies) ++ ++ if(rsdIncoming && perSpecies && rsdIncoming->enabledIons.size()) + { + unsigned int typeVal; + if(fixedNumOut) +diff -r d478204af715 -r effd078610a7 src/backend/filters/ionInfo.cpp +--- a/src/backend/filters/ionInfo.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/ionInfo.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -398,7 +398,7 @@ + + + //"Pairwise events" - where we perform an action if both +- //These ++ //these are set + if(wantIonCounts && wantVolume) + { + if(computedVol > sqrtf(std::numeric_limits::epsilon())) +@@ -420,6 +420,9 @@ + } + } + ++ ++ progress.filterProgress=100; ++ + return 0; + } + +diff -r d478204af715 -r effd078610a7 src/backend/filters/spatialAnalysis.cpp +--- a/src/backend/filters/spatialAnalysis.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/spatialAnalysis.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -655,115 +655,180 @@ + return ERR_FILE_READ_FAIL; + + +- +- progress.step=3; +- progress.stepName=TRANS("Build"); +- progress.filterProgress=0; +- +- //Build the search tree we will use to perform replacement +- K3DTreeMk2 tree; +- tree.resetPts(fileIons,false); +- if(!tree.build()) +- return ERR_ABORT_FAIL; +- BoundCube b; +- tree.getBoundCube(b); +- +- //map the offset of the nearest to +- //the tree ID +- vector nearestVec; +- nearestVec.resize(inIons.size()); +- +- //TODO: pair vector might be faster +- // as we can use it in sequence, and can use openmp +- map matchedMap; +- +- //Find the nearest point for all points in the dataset +- +- #pragma omp parallel for +- for(size_t ui=0;ui outIons; ++ if(inIons.empty() || fileIons.empty()) + { +- nearestVec[ui]=tree.findNearestUntagged(inIons[ui].getPos(),b,false); +- } +- +- float sqrReplaceTol=replaceTolerance*replaceTolerance; +- +- //Filter this to only points that had an NN within range +- #pragma omp parallel for +- for(size_t ui=0;ui outIons; +- switch(replaceMode) +- { +- case REPLACE_MODE_SUBTRACT: ++ ++ progress.step=3; ++ progress.stepName=TRANS("Build"); ++ progress.filterProgress=0; ++ ++ //TODO: Possible speed increase by finding the smaller of ++ // the two inputs, and using that to build the tree ++ ++ //Build the search tree we will use to perform replacement ++ K3DTreeMk2 tree; ++ tree.resetPts(fileIons,false); ++ if(!tree.build()) ++ return ERR_ABORT_FAIL; ++ BoundCube b; ++ tree.getBoundCube(b); ++ ++ //map the offset of the nearest to ++ //the tree ID ++ vector nearestVec; ++ nearestVec.resize(inIons.size()); ++ ++ //TODO: pair vector might be faster ++ // as we can use it in sequence, and can use openmp ++ map matchedMap; ++ ++ //Find the nearest point for all points in the dataset ++ // maps the ith ion in "inions" to the tree value ++ #pragma omp parallel for ++ for(size_t ui=0;ui matchedMap.size()) +- outIons.reserve(inIons.size()-matchedMap.size()); +- +- // +- #pragma omp parallel for +- for(unsigned int ui=0;ui::iterator it; +- it=matchedMap.find(ui); +- if(it != matchedMap.end()) +- continue; +- + #pragma omp critical +- outIons.push_back(inIons[ui]); ++ matchedMap[ui]=tree.getOrigIndex(nearestVec[ui]); + } +- break; + } +- case REPLACE_MODE_INTERSECT: ++ ++ nearestVec.clear(); ++ ++ ++ progress.step=4; ++ progress.stepName=TRANS("Compute"); ++ progress.filterProgress=0; ++ ++ ++ //now we have a map that matches as so: ++ // map ( "inIon" ID -> "fileIon" ID) ++ // inIon should be our "A" in "A operator B" ++ switch(replaceMode) + { +- outIons.reserve(matchedMap.size()); +- +- if(replaceMass) ++ case REPLACE_MODE_SUBTRACT: + { +- for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ //If no matches, A-0 = A. Just return input ++ if(matchedMap.empty()) + { +- outIons.push_back(fileIons[it->second]); +- ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); ++ outIons.swap(inIons); ++ break; + } ++ //In subtraction mode, we should have ++ // at least this many ions ++ if(inIons.size() > matchedMap.size()) ++ outIons.reserve(inIons.size()-matchedMap.size()); ++ ++ // ++ #pragma omp parallel for ++ for(unsigned int ui=0;ui::iterator it; ++ it=matchedMap.find(ui); ++ if(it != matchedMap.end()) ++ continue; ++ ++ #pragma omp critical ++ outIons.push_back(inIons[ui]); ++ } ++ break; + } +- else ++ case REPLACE_MODE_INTERSECT: + { +- for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ //Finish if no matches ++ if(matchedMap.empty()) ++ break; ++ ++ outIons.reserve(matchedMap.size()); ++ ++ if(replaceMass) + { +- outIons.push_back(inIons[it->first]); ++ for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ { ++ outIons.push_back(fileIons[it->second]); ++ ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); ++ } + } ++ else ++ { ++ for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ { ++ outIons.push_back(inIons[it->first]); ++ } ++ } ++ break; + } +- break; ++ case REPLACE_MODE_UNION: ++ { ++ outIons.swap(fileIons); ++ outIons.reserve(outIons.size() + fileIons.size() - matchedMap.size()); ++ map::const_iterator it=matchedMap.begin(); ++ ++ ++ for(unsigned int ui=0;uifirst == ui) ) ++ { ++ it++; ++ continue; ++ } ++ ++ ++ outIons.push_back(inIons[ui]); ++ } ++ ++ ++ break; ++ } ++ default: ++ ASSERT(false); + } +- case REPLACE_MODE_UNION: +- { +- ASSERT(false); +- break; +- } +- default: +- ASSERT(false); + } + + //Only output ions if any were found +@@ -2779,6 +2844,8 @@ + newD->data.resize(d->data.size()); + if(stopMode == STOP_MODE_NEIGHBOUR) + { ++ unsigned int nProg=0; ++ + bool spin=false; + #pragma omp parallel for shared(spin) + for(size_t uj=0;ujdata.size();uj++) +@@ -2811,14 +2878,15 @@ + } + + res.clear(); ++ #pragma atomic ++ nProg++; + + //Update progress as needed + if(!curProg--) + { + #pragma omp critical + { +- n+=NUM_CALLBACK/(nnMax); +- progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); ++ progress.filterProgress= (unsigned int)(((float)nProg/(float)totalDataSize)*100.0f); + if(*Filter::wantAbort) + spin=true; + curProg=NUM_CALLBACK/(nnMax); +@@ -3063,9 +3131,10 @@ + IonStreamData *newD = new IonStreamData; + newD->parent=this; + +- //Adjust this number to provide more update thanusual, because we ++ //Adjust this number to provide more update than usual, because we + //are not doing an o(1) task between updates; yes, it is a hack +- unsigned int curProg=NUM_CALLBACK/(10*nnMax); ++ const unsigned int PROG_PER_PASS=NUM_CALLBACK/(10*nnMax); ++ unsigned int curProg=PROG_PER_PASS; + newD->data.reserve(d->data.size()); + if(stopMode == STOP_MODE_NEIGHBOUR) + { +@@ -3113,11 +3182,11 @@ + { + #pragma omp critical + { +- n+=NUM_CALLBACK/(nnMax); ++ n+=PROG_PER_PASS; + progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); + if(*Filter::wantAbort) + spin=true; +- curProg=NUM_CALLBACK/(nnMax); ++ curProg=PROG_PER_PASS; + } + } + } +@@ -3263,6 +3332,8 @@ + break; + } + } ++ progress.filterProgress=100; ++ + //If we have bad points, let the user know. + if(!badPts.empty()) + { +@@ -4230,11 +4301,8 @@ + } + + //distance between search pt and found pt +- float sqrDistance; +- sqrDistance = searchTree.getPtRef(ptIdx).sqrDist(pSource[ui].getPosRef()); +- +- if(sqrDistance > DISTANCE_EPSILON) +- ptsFound.insert(ptIdx); ++ ++ ptsFound.insert(ptIdx); + } + + +@@ -4244,8 +4312,14 @@ + //Count the number of numerator and denominator ions, using the masses we set aside earlier + for(set::iterator it=ptsFound.begin(); it!=ptsFound.end(); ++it) + { ++ ++ //check that the distance is non-zero, to force no self-matching ++ float sqrDistance; ++ sqrDistance = searchTree.getPtRef(*it).sqrDist(pSource[ui].getPosRef()); ++ if(sqrDistance < DISTANCE_EPSILON) ++ continue; ++ + float ionMass; +- //check that the distance is non-zero, to force no self-matching + ionMass = dataMasses[searchTree.getOrigIndex(*it)]; + + unsigned int ionID; +@@ -4326,9 +4400,11 @@ + bool nnHistogramTest(); + bool rdfPlotTest(); + bool axialDistTest(); +-bool replaceTest(); ++bool replaceIntersectAndUnionTest(); + bool localConcTestRadius(); + bool localConcTestNN(); ++bool replaceSubtractTest(); ++bool replaceUnionTest(); + + bool SpatialAnalysisFilter::runUnitTests() + { +@@ -4343,8 +4419,15 @@ + + if(!axialDistTest()) + return false; +- if(!replaceTest()) ++ if(!replaceIntersectAndUnionTest()) + return false; ++ ++ if(!replaceSubtractTest()) ++ return false; ++ ++ if(!replaceUnionTest()) ++ return false; ++ + if(!localConcTestRadius()) + return false; + +@@ -4617,7 +4700,7 @@ + return true; + } + +-bool replaceTest() ++bool replaceIntersectAndUnionTest() + { + std::string ionFile=createTmpFilename(NULL,".pos"); + +@@ -4637,6 +4720,157 @@ + //Create a spatial analysis filter + SpatialAnalysisFilter *f=new SpatialAnalysisFilter; + f->setCaching(false); ++ //Set it to do a union calculation ++ bool needUp; ++ string s; ++ s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); ++ TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); ++ TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); ++ s="1"; ++ TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); ++ ++ vector opVec; ++ opVec.push_back(REPLACE_MODE_INTERSECT); ++ opVec.push_back(REPLACE_MODE_UNION); ++ ++ ProgressData p; ++ vector streamIn,streamOut; ++ streamIn.push_back(d); ++ for(unsigned int opId=0;opIdsetProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); ++ ++ //Do the refresh ++ TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); ++ ++ TEST(streamOut.size() == 1,"stream count"); ++ TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); ++ TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); ++ ++ //we should have taken the mass-to-charge from the file ++ const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; ++ for(unsigned int ui=0;uidata[ui].getMassToCharge() == 1); ++ } ++ delete streamOut[0]; ++ streamOut.clear(); ++ } ++ delete f; ++ delete d; ++ ++ wxRemoveFile(ionFile); ++ ++ ++ return true; ++} ++ ++bool replaceSubtractTest() ++{ ++ std::string ionFile=createTmpFilename(NULL,".pos"); ++ ++ vector ions; ++ const unsigned int NIONS=10; ++ const unsigned int DIFF_COUNT=5; ++ for(unsigned int ui=0;ui tmpI; ++ for(unsigned int ui=0;uidata.swap(ions); ++ ++ //Create a spatial analysis filter ++ SpatialAnalysisFilter *f=new SpatialAnalysisFilter; ++ f->setCaching(false); ++ ++ //Set it to do a subtraction calculation ++ bool needUp; ++ string s; ++ s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); ++ TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); ++ TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); ++ s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_SUBTRACT]); ++ TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); ++ ++ //Do the refresh ++ ProgressData p; ++ vector streamIn,streamOut; ++ streamIn.push_back(d); ++ TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); ++ delete f; ++ delete d; ++ streamIn.clear(); ++ ++ TEST(streamOut.size() == 1,"stream count"); ++ TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); ++ TEST(streamOut[0]->getNumBasicObjects() == DIFF_COUNT,"Number objects"); ++ ++ //we should have taken the mass-to-charge from the original data, ++ // not the file ++ const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; ++ for(unsigned int ui=0;uigetNumBasicObjects(); ui++) ++ { ++ ASSERT(outIons->data[ui].getMassToCharge() == 1); ++ ASSERT(outIons->data[ui].getPos()[2] >= 0); ++ } ++ ++ wxRemoveFile(ionFile); ++ ++ delete streamOut[0]; ++ ++ return true; ++} ++ ++bool replaceUnionTest() ++{ ++ std::string ionFile=createTmpFilename(NULL,".pos"); ++ ++ //"B" dataset ++ vector ions; ++ ions.push_back(IonHit(Point3D(0,0,0),1)); ++ ions.push_back(IonHit(Point3D(1,0,1),1)); ++ ions.push_back(IonHit(Point3D(0,1,1),1)); ++ ++ IonHit::makePos(ions,ionFile.c_str()); ++ ions.clear(); ++ ++ //"A" dataset ++ ions.push_back(IonHit(Point3D(0,0,0),2)); ++ ions.push_back(IonHit(Point3D(1,0,-1),2)); ++ ions.push_back(IonHit(Point3D(0,1,-1),2)); ++ ++ ++ IonStreamData *d = new IonStreamData; ++ d->data.swap(ions); ++ ++ //Create a spatial analysis filter ++ SpatialAnalysisFilter *f=new SpatialAnalysisFilter; ++ f->setCaching(false); + + //Set it to do a union calculation + bool needUp; +@@ -4644,13 +4878,11 @@ + s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); + TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); + TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); +- s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_INTERSECT]); ++ s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_UNION]); + TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); +- + s="1"; + TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); + +- + //Do the refresh + ProgressData p; + vector streamIn,streamOut; +@@ -4662,14 +4894,16 @@ + + TEST(streamOut.size() == 1,"stream count"); + TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); +- TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); +- +- //we should have taken the mass-to-charge from the file ++ TEST(streamOut[0]->getNumBasicObjects() == 5,"Number objects"); ++ ++ //There should be + const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; +- for(unsigned int ui=0;uigetNumBasicObjects(); ui++) + { +- ASSERT(outIons->data[ui].getMassToCharge() == 1); ++ sumV+=outIons->data[ui].getMassToCharge(); + } ++ TEST( EQ_TOL(sumV,7.0f),"mass-to-charge check"); + + wxRemoveFile(ionFile); + +@@ -4678,7 +4912,6 @@ + return true; + } + +- + //--- Local concentration tests -- + const IonStreamData *createLCIonStream() + { +diff -r d478204af715 -r effd078610a7 src/backend/filters/spectrumPlot.cpp +--- a/src/backend/filters/spectrumPlot.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/spectrumPlot.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -517,6 +517,8 @@ + + getOut.push_back(d); + ++ progress.filterProgress=100; ++ + return 0; + } + +diff -r d478204af715 -r effd078610a7 src/backend/filters/transform.cpp +--- a/src/backend/filters/transform.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/filters/transform.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -998,8 +998,10 @@ + break; + } + ++ } + } +- } ++ ++ progress.filterProgress=100; + } + else + { +@@ -1526,6 +1528,11 @@ + case KEY_CROP_MINIMUM: + { + ASSERT(scalarParams.size() ==2); ++ float tmp; ++ if(stream_cast(tmp,value) || tmp >=scalarParams[1]) ++ return false; ++ ++ + if(!applyPropertyNow(scalarParams[0],value,needUpdate)) + return false; + break; +@@ -1533,6 +1540,9 @@ + case KEY_CROP_MAXIMUM: + { + ASSERT(scalarParams.size() ==2); ++ float tmp; ++ if(stream_cast(tmp,value) || tmp <=scalarParams[0]) ++ return false; + if(!applyPropertyNow(scalarParams[1],value,needUpdate)) + return false; + break; +diff -r d478204af715 -r effd078610a7 src/backend/plot.cpp +--- a/src/backend/plot.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/plot.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -29,7 +29,7 @@ + NTRANS("Moving avg.") + }; + +-const char *plotTypeStrings[]= { ++const char *traceStyleStrings[]= { + NTRANS("Lines"), + NTRANS("Bars"), + NTRANS("Steps"), +@@ -119,15 +119,15 @@ + string plotString(unsigned int plotMode) + { + ASSERT(plotMode< PLOT_TYPE_ENUM_END); +- return TRANS(plotTypeStrings[plotMode]); ++ return TRANS(traceStyleStrings[plotMode]); + } + + unsigned int plotID(const std::string &plotString) + { +- COMPILE_ASSERT(THREEDEP_ARRAYSIZE(plotTypeStrings) == PLOT_TYPE_ENUM_END); ++ COMPILE_ASSERT(THREEDEP_ARRAYSIZE(traceStyleStrings) == PLOT_TYPE_ENUM_END); + for(unsigned int ui=0;uigetPlotMode(); ++} ++ + void PlotWrapper::getVisibleIDs(vector &visiblePlotIDs ) const + { + +@@ -791,7 +797,7 @@ + if(!plottingData[ui]->visible) + continue; + +- if(plottingData[ui]->getType()!= PLOT_MODE_1D) ++ if(plottingData[ui]->getMode()!= PLOT_MODE_1D) + continue; + + if(((Plot1D*)plottingData[ui])->wantLogPlot()) +@@ -809,7 +815,7 @@ + float minYVal=0.1; + for(size_t ui=0;uivisible || plottingData[ui]->getType() !=PLOT_MODE_1D) ++ if(!plottingData[ui]->visible || plottingData[ui]->getMode() !=PLOT_MODE_1D) + continue; + + float tmp ; +@@ -929,7 +935,7 @@ + Plot2DFunc *curPlot; + curPlot=(Plot2DFunc*)plottingData[ui]; + +- if(curPlot->getType() == PLOT_2D_DENS) ++ if(curPlot->getMode() == PLOT_2D_DENS) + { + wantColourbar=true; + } +@@ -1047,11 +1053,6 @@ + plottingData[plotIDHandler.getPos(plotId)]->regionGroup.getRegion(regionId,region); + } + +-unsigned int PlotWrapper::plotType(unsigned int plotId) const +-{ +- return plottingData[plotIDHandler.getPos(plotId)]->getPlotMode(); +-} +- + + void PlotWrapper::moveRegion(unsigned int plotID, unsigned int regionId, bool regionSelfUpdate, + unsigned int movementType, float newX, float newY) const +@@ -1135,7 +1136,7 @@ + + void PlotBase::copyBase(PlotBase *target) const + { +- target->plotType=plotType; ++ target->traceStyle=traceStyle; + target->minX=minX; + target->maxX=maxX; + target->minY=minY; +@@ -1157,12 +1158,12 @@ + + unsigned int PlotBase::getType() const + { +- return plotType; ++ return traceStyle; + } + + unsigned int PlotBase::getMode() const + { +- switch(plotType) ++ switch(traceStyle) + { + case PLOT_LINE_LINES: + case PLOT_LINE_BARS: +@@ -1181,7 +1182,7 @@ + Plot1D::Plot1D() + { + //Set the default plot properties +- plotType=PLOT_LINE_LINES; ++ traceStyle=PLOT_LINE_LINES; + plotMode=PLOT_MODE_1D; + xLabel=""; + yLabel=""; +@@ -1489,7 +1490,7 @@ + + + //Plot the appropriate form +- switch(plotMode) ++ switch(traceStyle) + { + case PLOT_LINE_LINES: + //Unfortunately, when using line plots, mathgl moves the data points to the plot boundary, +@@ -1632,7 +1633,7 @@ + Plot2DFunc::Plot2DFunc() + { + plotMode = PLOT_MODE_2D; +- plotType=PLOT_2D_DENS; ++ traceStyle=PLOT_2D_DENS; + } + + void Plot2DFunc::setData(const Array2D &a, +@@ -1705,7 +1706,8 @@ + + Plot2DScatter::Plot2DScatter() + { +- plotType=PLOT_2D_SCATTER; ++ plotMode=PLOT_2D_SCATTER; ++ traceStyle=PLOT_LINE_POINTS; + scatterIntensityLog=false; + } + +diff -r d478204af715 -r effd078610a7 src/backend/plot.h +--- a/src/backend/plot.h Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/plot.h Tue Jun 21 12:45:20 2016 +0100 +@@ -217,7 +217,7 @@ + class PlotBase + { + protected: +- //!Sub type of plot (eg lines, bars for 1D) ++ //!Type of plot + unsigned int plotMode; + //!xaxis label + std::string xLabel; +@@ -229,8 +229,9 @@ + //plot colour (for single coloured plots) + float r,g,b; + +- //The type of plot (ie what class is it?) +- unsigned int plotType; ++ //The sub-style of the plot trace (eg lines, points, bars, etc) ++ // FIXME: This is badly named, change to traceStyle, or dataStyle, or something ++ unsigned int traceStyle; + + void copyBase(PlotBase *target) const; + +@@ -297,8 +298,12 @@ + void setStrings(const std::string &x, + const std::string &y,const std::string &t); + ++ //Set the colour of the plot trace + void setColour(float rNew, float gNew, float bNew); + ++ //set the visual style for the trace (dots, lines, etc) ++ void setTraceStyle(unsigned int newStyle) { traceStyle=newStyle;} ++ + std::string getXLabel() const { return xLabel;} + std::string getTitle() const { return title;} + std::string getYLabel() const { return yLabel;} +@@ -309,6 +314,7 @@ + void setPlotMode(unsigned int newMode) { plotMode= newMode;} + + ++ //get the colour of the trace + void getColour(float &r, float &g, float &b) const ; + + #ifdef DEBUG +@@ -613,7 +619,7 @@ + + + //!obtain the type of a plot, given the plot's uniqueID +- unsigned int plotType(unsigned int plotId) const; ++ unsigned int getPlotMode(unsigned int plotId) const; + + //Retrieve the types of visible plots + unsigned int getVisibleMode() const; +diff -r d478204af715 -r effd078610a7 src/backend/viscontrol.cpp +--- a/src/backend/viscontrol.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/backend/viscontrol.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -249,7 +249,7 @@ + plotData->yLabel,plotData->dataLabel); + + //set the appearance of the plot +- //plotNew->setTraceStyle(plotStyle); ++ plotNew->setTraceStyle(plotData->plotStyle); + plotNew->setColour(plotData->r,plotData->g,plotData->b); + + +@@ -275,7 +275,7 @@ + unsigned int plotID; + + PlotBase *plotNew; +- switch(plotData->plotType) ++ switch(plotData->plotStyle) + { + case PLOT_2D_DENS: + { +diff -r d478204af715 -r effd078610a7 src/common/basics.cpp +--- a/src/common/basics.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/common/basics.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -1347,7 +1347,8 @@ + while(CFile.good() && !CFile.eof() && atHeader) + { + //Grab a line from the file +- CFile.getline(inBuffer,BUFFER_SIZE); ++ if(!CFile.getline(inBuffer,BUFFER_SIZE)) ++ break; + + if(!CFile.good()) + return ERR_FILE_FORMAT; +@@ -1457,10 +1458,8 @@ + + } + //Grab a line from the file +- CFile.getline(inBuffer,BUFFER_SIZE); +- +- if(!CFile.good() && !CFile.eof()) +- return ERR_FILE_FORMAT; ++ if(!CFile.getline(inBuffer,BUFFER_SIZE)) ++ break; + } + + return 0; +diff -r d478204af715 -r effd078610a7 src/gui/mainFrame.cpp +--- a/src/gui/mainFrame.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/gui/mainFrame.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -1391,7 +1391,7 @@ + updateWxTreeCtrl(treeFilters); + + if(!noUpdate) +- return doSceneUpdate(true); ++ doSceneUpdate(true); + + return true; + } +@@ -3834,7 +3834,7 @@ + + } + +-bool MainWindowFrame::doSceneUpdate(bool ensureVisible) ++void MainWindowFrame::doSceneUpdate(bool ensureVisible) + { + //Update scene + ASSERT(!currentlyUpdatingScene); +@@ -3864,6 +3864,11 @@ + ensureResultVisible=ensureVisible; + + ASSERT(!refreshControl); ++ ++ //Hack to prevent crash on double-refresh ++ if(refreshControl) ++ return; ++ + refreshControl = new RefreshController(visControl.state.treeState); + refreshThread=new RefreshThread(this,refreshControl); + progressTimer->Start(PROGRESS_TIMER_DELAY); +@@ -3871,7 +3876,8 @@ + refreshThread->Create(); + refreshThread->Run(); + +- return true; ++ cerr << "Updating scene complete"<< endl; ++ return; + } + + void MainWindowFrame::updateWxTreeCtrl( wxTreeCtrl *t, const Filter *f) +@@ -3971,6 +3977,11 @@ + ASSERT(!visControl.state.treeState.isRefreshing()); + progressTimer->Stop(); + ++ //Hack to prevent crash on re-entry during refresh. Should never trigger. ++ if(!refreshControl) ++ return; ++ ++ + vector > consoleMessages; + consoleMessages=refreshControl->getConsoleMessages(); + +diff -r d478204af715 -r effd078610a7 src/gui/mainFrame.h +--- a/src/gui/mainFrame.h Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/gui/mainFrame.h Tue Jun 21 12:45:20 2016 +0100 +@@ -124,7 +124,7 @@ + //!Update the progress information in the status bar + void updateProgressStatus(); + //!Perform an update to the 3D Scene. Returns false if refresh failed +- bool doSceneUpdate(bool ensureResultVisible=false); ++ void doSceneUpdate(bool ensureResultVisible=false); + + //!Complete the scene update. Returns false if failed + void finishSceneUpdate(unsigned int errCode); +diff -r d478204af715 -r effd078610a7 src/gui/mathglPane.cpp +--- a/src/gui/mathglPane.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/gui/mathglPane.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -627,7 +627,7 @@ + thePlot->getRegion(plotId,regionId,r); + + //TODO: Implement a more generic region handler? +- ASSERT(thePlot->plotType(plotId) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(plotId) == PLOT_MODE_1D); + + float mglStartX,mglStartY; + toPlotCoords(draggingStart.x, draggingStart.y,mglStartX,mglStartY); +@@ -1471,7 +1471,7 @@ + return; + + +- ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); + + //See where extending the region is allowed up to. + thePlot->findRegionLimit(startMousePlot,startMouseRegion, +@@ -1550,7 +1550,7 @@ + { + //This needs to be extended to support more + //plot types. +- ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); + + //Draw "ghost" limits markers for move, + //these appear as moving vertical bars to outline +diff -r d478204af715 -r effd078610a7 src/wx/wxcomponents.cpp +--- a/src/wx/wxcomponents.cpp Mon Jun 27 11:07:17 2016 +0100 ++++ b/src/wx/wxcomponents.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -188,14 +188,14 @@ + + void CopyGrid::saveData() + { +- wxFileDialog *wxF = new wxFileDialog(this,TRANS("Save Data..."), wxT(""), ++ wxFileDialog wxF(this,TRANS("Save Data..."), wxT(""), + wxT(""),TRANS("Text File (*.txt)|*.txt|All Files (*)|*"),wxFD_SAVE); + +- if( (wxF->ShowModal() == wxID_CANCEL)) ++ if( (wxF.ShowModal() == wxID_CANCEL)) + return; + + +- std::string dataFile = stlStr(wxF->GetPath()); ++ std::string dataFile = stlStr(wxF.GetPath()); + ofstream f(dataFile.c_str()); + + if(!f) diff -Nru 3depict-0.0.19-1/packaging/debian/patches/FTGL-lowercase.patch 3depict-0.0.20/packaging/debian/patches/FTGL-lowercase.patch --- 3depict-0.0.19-1/packaging/debian/patches/FTGL-lowercase.patch 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/FTGL-lowercase.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -Description: Debian uses lowercase lib names. -Forwarded: not-needed -Author: D Haley ---- 3depict-0.0.16.orig/configure -+++ 3depict-0.0.16/configure -@@ -6129,7 +6129,7 @@ - if test "x$ftgl_prefix" != "x" ; then - #use the supplied CFLAGS. assume LIBS - FTGL_CFLAGS="-I$ftgl_prefix/include/ -L$ftgl_prefix/lib/" -- FTGL_LIBS="-lFTGL" -+ FTGL_LIBS="-lftgl" - else - - HAVE_PKG=$(basename $(which pkg-config)) diff -Nru 3depict-0.0.19-1/packaging/debian/patches/lowercase-textdomain.patch 3depict-0.0.20/packaging/debian/patches/lowercase-textdomain.patch --- 3depict-0.0.19-1/packaging/debian/patches/lowercase-textdomain.patch 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/lowercase-textdomain.patch 2017-01-21 12:43:39.000000000 +0000 @@ -1,9 +1,11 @@ Description: Debian uses different text domain for the lang files Forwarded: not-needed Author: D Haley ---- 3depict-0.0.16.orig/src/3Depict.cpp -+++ 3depict-0.0.16/src/3Depict.cpp -@@ -166,7 +166,7 @@ +Index: 3depict-0.0.19/src/3Depict.cpp +=================================================================== +--- 3depict-0.0.19.orig/src/3Depict.cpp 2016-08-04 00:12:38.260085712 +0200 ++++ 3depict-0.0.19/src/3Depict.cpp 2016-08-04 00:12:38.256085765 +0200 +@@ -179,7 +179,7 @@ else { //Set the gettext language @@ -12,7 +14,7 @@ setlocale (LC_ALL, ""); #ifdef __WXMAC__ bindtextdomain( PROGRAM_NAME, paths->GetResourcesDir().mb_str(wxConvUTF8) ); -@@ -198,8 +198,8 @@ +@@ -211,8 +211,8 @@ break; } #else diff -Nru 3depict-0.0.19-1/packaging/debian/patches/series 3depict-0.0.20/packaging/debian/patches/series --- 3depict-0.0.19-1/packaging/debian/patches/series 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/patches/series 2017-01-21 12:43:39.000000000 +0000 @@ -1,2 +1,4 @@ +diff_0.0.19_to_effd078610a7 debian-desktop-naming.patch lowercase-textdomain.patch +desktop-category.patch diff -Nru 3depict-0.0.19-1/packaging/debian/rules 3depict-0.0.20/packaging/debian/rules --- 3depict-0.0.19-1/packaging/debian/rules 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/rules 2017-01-21 12:43:39.000000000 +0000 @@ -1,12 +1,10 @@ #!/usr/bin/make -f %: - dh $@ --parallel + dh $@ --parallel --with autotools-dev --with autoreconf override_dh_auto_configure: - LDFLAGS="$(LDFLAGS) -Wl,--as-needed" dh_auto_configure -- --prefix=/usr \ - --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info \ - --enable-openmp-parallel --disable-debug-checks --with-libpng-link="-lpng" --with-libpng-flags="-L/lib" --with-ftgl-prefix="/usr" + LDFLAGS="$(LDFLAGS) -Wl,--as-needed" dh_auto_configure -- --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --enable-openmp-parallel --disable-debug-checks --with-libpng-link="-lpng" --with-libpng-flags="-L/lib" --with-ftgl-prefix="/usr" --enable-mgl2 override_dh_clean: diff -Nru 3depict-0.0.19-1/packaging/debian/source/local-options 3depict-0.0.20/packaging/debian/source/local-options --- 3depict-0.0.19-1/packaging/debian/source/local-options 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/debian/source/local-options 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -unapply-patches -abort-on-upstream-changes diff -Nru 3depict-0.0.19-1/packaging/deps/getDeps 3depict-0.0.20/packaging/deps/getDeps --- 3depict-0.0.19-1/packaging/deps/getDeps 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/deps/getDeps 2017-01-21 11:37:59.000000000 +0000 @@ -189,7 +189,7 @@ done - # install deps except mathgl + # install deps echo "installing some 3Depict dependencies..." sudo port install wget libpng freetype ftgl wxWidgets-3.0 dylibbundler qhull gsl cmake libtool pkgconfig vigra mathgl if [ $? -ne 0 ] ; then diff -Nru 3depict-0.0.19-1/packaging/deps/patches/macosx/macdylibbundler/DylibBundler-patch.diff 3depict-0.0.20/packaging/deps/patches/macosx/macdylibbundler/DylibBundler-patch.diff --- 3depict-0.0.19-1/packaging/deps/patches/macosx/macdylibbundler/DylibBundler-patch.diff 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/deps/patches/macosx/macdylibbundler/DylibBundler-patch.diff 2017-02-01 23:53:14.000000000 +0000 @@ -0,0 +1,26 @@ +diff --git a/src/DylibBundler.cpp b/src/DylibBundler.cpp +index 8e4926c..71fb795 100644 +--- a/src/DylibBundler.cpp ++++ b/src/DylibBundler.cpp +@@ -92,7 +92,9 @@ void collectDependencies(std::string filename) + { + std::cout << "."; fflush(stdout); + if(lines[n][0] != '\t') continue; // only lines beginning with a tab interest us +- if( lines[n].find(".framework") != std::string::npos ) continue; //Ignore frameworks, we can not handle them ++ if( lines[n].find(".framework") != std::string::npos ) ++ if( lines[n].find(".dylib") == std::string::npos ) ++ continue; //Ignore frameworks, we can not handle them + + addDependency( // trim useless info, keep only library name + lines[n].substr(1, lines[n].rfind(" (") - 1) +@@ -118,7 +120,9 @@ void collectSubDependencies() + for(int n=0; n 0.18.1.1 ? -# https://lists.gnu.org/archive/html/bug-gettext/2012-12/msg00071.html -PATCHES_GETTEXT="gettext-fix-configure-versions" #gettext-win32-prefix +PATCHES_GETTEXT="gettext-fix-configure-versions gettext-disable-tools" PATCHES_GLEW="glew-makefile.base" -PATCHES_MATHGL="mathgl-openmp-linker-flag mathgl-disable-things" -PATCHES_QHULL="qhull-ptr.patch" -PATCH_LIST="$PATCHES_WXWIDGETS_POST $PATCHES_GSL $PATCHES_ZLIB $PATCHES_LIBPNG $PATCHES_GETTEXT $PATCHES_FTGL $PATCHES_GLEW $PATCHES_MATHGL $PATCHES_FTGL_POSTCONF $PATCHES_ICONV $PATCHES_QHULL" +PATCHES_MATHGL="mathgl-disable-things" + +PATCHES_QHULL="qhull-ptr.patch qhull-2009-configure_ac.patch" + +#Vigra's cmakelists assumes you can execute compiled binaries on the host +# this obviously won't work for cross compilation +PATCHES_LIBVIGRA="vigra-cpp-version.patch" + +PATCH_LIST="$PATCHES_WXWIDGETS_POST $PATCHES_GSL $PATCHES_ZLIB $PATCHES_LIBPNG $PATCHES_GETTEXT $PATCHES_FTGL $PATCHES_GLEW $PATCHES_MATHGL $PATCHES_FTGL_POSTCONF $PATCHES_ICONV $PATCHES_QHULL $PATCHES_LIBVIGRA" BUILD_STATUS_FILE="$BASE/build-status" @@ -159,20 +206,27 @@ { pushd deps 2>/dev/null - DEB_PACKAGES="qhull expat freetype ftgl gettext gsl libpng libxml2 mathgl tiff zlib glew libvigraimpex" + DEB_PACKAGES="qhull expat freetype ftgl gettext gsl libxml2 mathgl tiff zlib glew libvigraimpex libpng-dev" if [ x$DIST_NAME == x"Ubuntu" ] || [ x$DIST_NAME == x"LinuxMint" ] ; then LIBJPEGNAME="libjpeg6b" else #Libjpeg seems to be forked/renamed very frequently in debian # Likely a new libjpeg will need to be picked each time this script is run - LIBJPEGNAME="libjpeg9" + LIBJPEGNAME="libjpeg-turbo" fi DEB_PACKAGES="$DEB_PACKAGES $LIBJPEGNAME" GET_PACKAGES="" for i in $DEB_PACKAGES do - FNAME=`ls packages/${i}_*.orig.* 2> /dev/null` + + #libpng-dev is a virtual package? + if [ x"$i" != x"libpng-dev" ] ; then + FNAME=`ls packages/${i}_*.orig.* 2> /dev/null` + else + FNAME=`ls packages/libpng*_*.orig.* 2> /dev/null` + fi + #If filename is empty, we will need to retreive it from # interwebs if [ x"$FNAME" == x"" ] ; then @@ -269,6 +323,28 @@ sudo apt-get install nsis || { echo "Failed installation"; exit 1; } fi + #Download wxwidgets as needed + #---- + + WXVER=wxWidgets-3.1.0 + if [ ! -f packages/${WXVER}.tar.bz2 ] ; then + wget "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/${WXVER}.tar.bz2" + mv ${WXVER}.tar.bz2 packages/ + fi + + #check SHA256 + if [ x`sha256sum packages/${WXVER}.tar.bz2 | awk '{print $1}'` != x'e082460fb6bf14b7dd6e8ac142598d1d3d0b08a7b5ba402fdbf8711da7e66da8' ] ; then + echo "SHA256 sum mismatch for wxwidgets"; + exit 1 + fi + + #Extract + if [ ! -d ${WXVER} ] ; then + tar -jxf packages/${WXVER}.tar.bz2 || { echo "failed extracting wxwidgets "; exit 1; } + fi + #---- + + popd 2> /dev/null } @@ -402,17 +478,28 @@ make clean rm -f configure.log - LD=$CC make -j $NUM_PROCS || { echo "glew build failed"; exit 1; } + LD=$CC CC=$CC CXX=$CXX make -j $NUM_PROCS || { echo "glew build failed"; exit 1; } make install DESTDIR="$BASE"|| { echo "glew install failed"; exit 1; } popd >/dev/null popd >/dev/null + + #Check that glew built as a dynamic library. this should cause the init funcction + # to be preceded by the windows dynamic link prefix, __imp__ + IMP_PREFIX=`find ./ -name \*dll | xargs x86_64-w64-mingw32-objdump -x | grep Init | grep __imp` + if [ x"$IMP_PREFIX" == x"" ] ; then + echo " Glew build failed, due to missing __imp__ prefix (dynamic link)" + exit 1 + fi + #remove static library, as this can be incorrectly caught by linker # leading to confusing messages rm ${BASE}/lib/libglew*.a + #FIXME: The DLL and the include files are not being installed properly + echo "glew" >> $BUILD_STATUS_FILE } @@ -424,7 +511,7 @@ return; fi pushd deps >/dev/null - pushd libpng-* >/dev/null + pushd libpng[0-9.]*-* >/dev/null if [ $? -ne 0 ] ; then echo "libpng dir missing, or duplicated?" @@ -433,7 +520,7 @@ make clean - ./configure --host=$HOST_VAL --enable-shared --disable-static || { echo "Libpng configure failed"; exit 1; } + ./configure --host=$HOST_VAL --prefix=/ --enable-shared --disable-static || { echo "Libpng configure failed"; exit 1; } #Hack to strip linker version script # eg as discussed : @@ -642,7 +729,7 @@ make SO="dll" -j $NUM_PROCS find ./ -name \*dll -exec cp {} ${BASE}/bin/ make SO="dll" -j $NUM_PROCS || { echo "qhull build failed"; exit 1; } - make install DESTDIR="$BASE"|| { echo "qhull install failed"; exit 1; } + make SO="dll" install DESTDIR="$BASE"|| { echo "qhull install failed"; exit 1; } popd >/dev/null popd >/dev/null @@ -688,7 +775,7 @@ # IMHO, once I manually alter a cmakefile, the cache should fucking well work out that it is out-of-date, as I keep getting nasty suprises. # https://cmake.org/Bug/view.php?id=14820 . rm -f CMakeCache.txt - cmake -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL + cmake -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL -DWITH_BOOST=0 -DWITH_FFTW=0 -DWITH_LEMON=0 #TODO: Better test (using c) @@ -736,16 +823,35 @@ exit 1 fi + + #The as-distributed version of libtool no longer builds dlls with my gcc, it just fails silently. Rebuild + libtoolize --install + autoreconf + automake --add-missing + + #FIXME: Need to change the ptrT type on 64 bit, in mem.h + echo "Need to change ptrT, mem.h..." + exit 1 + + + make distclean + ./configure --host=$HOST_VAL --enable-shared --disable-static --prefix=/ || { echo "$NAME configure failed"; exit 1; } sed -i "s/ gcc$/${HOST_VAL}-gcc/" Makefile sed -i "s/ g++$/${HOST_VAL}-g++/" Makefile + make SO="dll" -j $NUM_PROCS find ./ -name \*dll -exec cp {} ${BASE}/bin/ make SO="dll" -j $NUM_PROCS || { echo "qhull build failed"; exit 1; } make install DESTDIR="$BASE"|| { echo "qhull install failed"; exit 1; } + if [ x`find ./ -name \*.dll` == x"" ] ; then + echo "Qhull DLL missing, after build. That's not right... (last time due to -no-undefined not given to linker flags, which libtool then decides means should do a static build. Updating libtool makes this more sane, and errors out)" + exit 1; + fi + popd >/dev/null popd >/dev/null @@ -759,7 +865,7 @@ #FIXME: This does not work. Qhull uses a strange combination of cmake # and hand makefiles, so propagating correct cross-compiling # parameters is quite tricky -function build_qhull2015() +function build_qhull2015b() { NAME="libqhull" ISBUILT_ARG=${NAME} @@ -884,18 +990,30 @@ echo "wxwidgets dir missing, or duplicated?" exit 1 fi - WX_VER=`grep "WX_RELEASE =" Makefile` + WX_VER=`egrep "WX_RELEASE\s*=" Makefile | awk -F= '{print $2}' | sed 's/\s*//'` - if [ x"${WX_VER}" == x"3.0" ] ; then - echo "WX needs to be at least 3.1, but is 3.0..." - exit 1 - fi + case ${WX_VER} in + "3.0" ) + echo "WX needs to be at least 3.1, but is 3.0..." + echo "this is due to a propgrid bug" + exit 1 + ;; + [0-9].[0-9]) + ;; + "" ) + echo "blah! - wx version not set!" + exit 1 + ;; + esac make clean - WX_DISABLE="--disable-compat26 --disable-compat28 --disable-ole --disable-dataobj --disable-ipc --disable-apple_ieee --disable-zipstream --disable-protocol_ftp --disable-mshtmlhelp --disable-aui --disable-mdi --disable-postscript --disable-datepick --disable-splash --disable-wizarddlg --disable-joystick --disable-loggui --disable-debug --disable-logwin --disable-logdlg --disable-tarstream --disable-fs_archive --disable-fs_inet --disable-fs_zip --disable-snglinst --disable-sound --disable-variant --without-regex" + #It might be possible to make this more aggressive. WX includes a lot of stuff we don't have any use for. + # Linux distributions disale their web stuff (eg disable-webkit), as there are apparently serious security issues with wx's implementation + # as a bonus, the more we disable, the less we have to compile! + WX_DISABLE="--disable-compat26 --disable-compat28 --disable-ipc --disable-apple_ieee --disable-zipstream --disable-protocol_ftp --disable-mshtmlhelp --disable-aui --disable-mdi --disable-postscript --disable-datepick --disable-splash --disable-wizarddlg --disable-joystick --disable-loggui --disable-debug --disable-logwin --disable-logdlg --disable-tarstream --disable-fs_archive --disable-fs_zip --disable-snglinst --disable-sound --without-regex --disable-stc --disable-bannerwindow --disable-splash --disable-mediactr --disable-webkit" - ./configure --host=$HOST_VAL --enable-shared --disable-static --with-opengl --enable-unicode --without-regex --prefix=/ || { echo "wxwidgets configure failed"; exit 1; } + ./configure --host=$HOST_VAL --enable-shared --disable-static --with-opengl --enable-unicode $WX_DISABLE --enable-wxurl --prefix=/ || { echo "wxwidgets configure failed"; exit 1; } #TODO: Where is this coming from ??? for i in `find ./ -name Makefile | grep -v samples | grep -v wxPython` @@ -913,7 +1031,7 @@ pushd ./bin/ - if [ -l wx-config ] ; then + if [ -L wx-config ] ; then unlink wx-config fi @@ -926,7 +1044,7 @@ fi if [ x"$WX_CONFIG_FILE" == x"" ] ; then - WX_CONFIG_FILE=`find ${BASE}/lib/wx/config/ -type f -executable -name x\*mingw32-msw-unicode-\*` + WX_CONFIG_FILE=`find ${BASE}/lib/wx/config/ -type f -executable -name \*mingw32-msw-unicode-\*` fi if [ x"$WX_CONFIG_FILE" == x"" ] ; then @@ -941,18 +1059,25 @@ PATCH_LEVEL=1 sed -i "s@REPLACE_BASENAME@${BASE}@" wx-config || { echo "Failed to update wx-config with build root,. Aborting"; exit 1; } popd + #FIXME : We still need to fix some problems with wx-config, wx-config --rescomp returns empty pushd ./lib/ ln -s wx-${WX_VER}/wx/ wx popd pushd ./include/wx-${WX_VER}/wx/msw/ - if [ x$BITS_VAL == 64 ] ; then + if [ x"$BITS_VAL" == x"64" ] ; then + echo "Replacing manifest" cp amd64.manifest wx.manifest fi popd + + pushd ./include + ln -s wx-${WX_VER}/wx/ wx + popd + echo ${NAME} >> $BUILD_STATUS_FILE } @@ -975,13 +1100,28 @@ tar -xjf freetype-[0-9]*bz2 || { echo "freetype decompress failed" ; exit 1; } - pushd freetype-[0-9]* + #For some reason, the debian package puts freetype in its own self-subdir + pushd freetype-[0-9].[0-9].[0-9] make clean - ./configure --host=$HOST_VAL --enable-shared --disable-static --without-png --with-harfbuzz=no --prefix=/ || { echo "freetype configure failed"; exit 1; } + #Create out-of-tree build zone + rm -rf build/ + mkdir build + pushd build + + LIBS=-lpng cmake -DWITH_HarfBuzz=OFF -DWITH_PNG=ON -DWITH_ZLIB=ON -DBUILD_SHARED_LIBS:BOOL=true -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=${BASE}/patches/cmake-toolchain$BITS_VAL -DPNG_PNG_INCLUDE_DIR=${BASE}/include/ ../ + + if [ $? -ne 0 ] ; then + echo "Cmake failed" + exit 1 + fi + + #Old configure-based build system +# ./configure --host=$HOST_VAL --enable-shared --disable-static --without-png --with-harfbuzz=no --prefix=/ || { echo "freetype configure failed"; exit 1; } make -j $NUM_PROCS || { echo "freetype build failed"; exit 1; } - make install DESTDIR="$BASE"|| { echo "freetype install failed"; exit 1; } + make install || { echo "freetype install failed"; exit 1; } + popd popd >/dev/null @@ -997,7 +1137,10 @@ pushd include >/dev/null ln -s freetype2/freetype/ popd >/dev/null - + + #Freetype does not install .dll properly, do by hand + find ./ -name libfreetype*dll -exec cp {} ${BASE}/lib/ \; || { echo "Unable to find freetype dll. Aborting" ; exit 1 ;} + echo ${NAME} >> $BUILD_STATUS_FILE } @@ -1061,7 +1204,10 @@ applyPatches automake - ./configure --host=$HOST_VAL --disable-threads --enable-shared --disable-static --prefix=/ || { echo "$NAME configure failed"; exit 1; } + #The CFlags/cxxflags thing is due to a really old gettext bug + # (who is maintaining that these days? the fix is known for years!) + # http://savannah.gnu.org/bugs/?36443 + CFLAGS="$CFLAGS -O2" CXXFLAGS="$CXXFLAGS -O2" ./configure --host=$HOST_VAL --disable-threads --enable-shared --disable-static --prefix=/ || { echo "$NAME configure failed"; exit 1; } make -j $NUM_PROCS || { echo "$NAME build failed"; exit 1; } @@ -1111,13 +1257,13 @@ APPLY_PATCH_ARG=$PATCHES_MATHGL applyPatches - if [ -d $BASEDIR/include/mgl2 ] ; then - echo "there are mgl2 headers already installed. Abort abort!"\ + if [ -d ${BASE}/include/mgl2 ] ; then + echo "there are mgl2 headers already installed. Abort abort!" exit 1 fi rm -f CMakeCache.txt - LIBS=-lpng cmake -Denable-gsl="yes" -Denable-mpi="no" -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL -DPNG_PNG_INCLUDE_DIR=${BASEDIR}/include/ + LIBS=-lpng cmake -Denable-gsl="yes" -Denable-jpeg="no" -Denable-mpi="no" -Denable-ltdl="no" -Denable-python="no" -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL -DPNG_PNG_INCLUDE_DIR=${BASEDIR}/include/ make -j $NUM_PROCS @@ -1158,7 +1304,7 @@ APPLY_PATCH_ARG=$PATCHES_LIBVIGRA applyPatches - cmake -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL -DPNG_PNG_INCLUDE_DIR=${BASEDIR}/include/ + cmake -DCMAKE_INSTALL_PREFIX="$BASE" -DCMAKE_TOOLCHAIN_FILE=../../patches/cmake-toolchain$BITS_VAL -DPNG_PNG_INCLUDE_DIR=${BASE}/include/ make -j $NUM_PROCS @@ -1211,8 +1357,9 @@ sed -i 's/return glBegin(GL_POINTS)/return 0;/' configure + FTFLAG=-I${BASE}/include/freetype2/ - ./configure --host=$HOST_VAL --enable-shared --disable-static --prefix=/ || { echo "ftgl configure failed"; exit 1; } + LIBS="-lfreetype -lz" CXXFLAGS=$FTFLAG CFLAG=$FTFLAG ./configure --host=$HOST_VAL --with-ft-prefix=${BASE}---enable-shared --disable-static --prefix=/ || { echo "ftgl configure failed"; exit 1; } #MAkefile refers to ECHO variable for reporting completion, which does not exist @@ -1393,6 +1540,8 @@ #HACK - find all -I// and -L// and replace them with something sane find ./ -name Makefile -exec sed -i "s@-I//@-I${BASE}/@" {} \; find ./ -name Makefile -exec sed -i "s@-L//@-L${BASE}/@" {} \; + #HACK : remove -lm, which picks up host's lib, rather than mingw build + find ./ -name Makefile -exec sed -i "s@-lgslcblas -lm@-lgslcblas@" {} \; #Actually perform build make -j$NUM_PROCS @@ -1646,21 +1795,21 @@ build_zlib build_libtiff -build_libpng +build_libpng build_libjpeg build_libxml2 build_gsl -build_qhull2012 +build_qhull2009 #build_qhull2015 build_expat -build_freetype +build_freetype build_libiconv build_gettext build_ftgl -build_glew +build_glew build_libvigra -build_mathgl +build_mathgl build_wx build_3Depict diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/gettext-disable-tools 3depict-0.0.20/packaging/mingw-debian-cross/patches/gettext-disable-tools --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/gettext-disable-tools 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/gettext-disable-tools 2017-01-24 22:39:14.000000000 +0000 @@ -1,47 +1,117 @@ -diff -r fc8ef26fbd29 Makefile.am ---- a/Makefile.am Fri Apr 22 23:17:46 2016 +0100 -+++ b/Makefile.am Fri Apr 22 23:20:55 2016 +0100 +diff -r 6a9c7304402f Makefile.am +--- a/Makefile.am Sun Jan 22 22:59:38 2017 +0000 ++++ b/Makefile.am Mon Jan 23 00:11:20 2017 +0000 @@ -19,7 +19,7 @@ AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = gnulib-local gettext-runtime gettext-tools -+SUBDIRS = gnulib-local gettext-runtime ++SUBDIRS = gnulib-local gettext-runtime changelog_etc = \ gettext-runtime/ChangeLog.0 \ -@@ -57,10 +57,12 @@ +@@ -30,25 +30,7 @@ + gettext-runtime/m4/ChangeLog.0 \ + gettext-runtime/man/ChangeLog.0 \ + gettext-runtime/src/ChangeLog.0 \ +- gettext-runtime/tests/ChangeLog.0 \ +- gettext-tools/ChangeLog.0 \ +- gettext-tools/doc/ChangeLog.0 \ +- gettext-tools/doc/ChangeLog.1 \ +- gettext-tools/examples/ChangeLog.0 \ +- gettext-tools/gnulib-tests/ChangeLog.0 \ +- gettext-tools/libgettextpo/ChangeLog.0 \ +- gettext-tools/libgrep/ChangeLog.0 \ +- gettext-tools/m4/ChangeLog.0 \ +- gettext-tools/man/ChangeLog.0 \ +- gettext-tools/man/ChangeLog.1 \ +- gettext-tools/misc/ChangeLog.0 \ +- gettext-tools/projects/ChangeLog.0 \ +- gettext-tools/src/ChangeLog.0 \ +- gettext-tools/src/ChangeLog.1 \ +- gettext-tools/styles/ChangeLog.0 \ +- gettext-tools/tests/ChangeLog.0 \ +- gettext-tools/tests/ChangeLog.1 \ +- gnulib-local/ChangeLog.0 ++ gettext-runtime/tests/ChangeLog.0 + + EXTRA_DIST = \ + $(changelog_etc) DEPENDENCIES PACKAGING HACKING ChangeLog.0 autogen.sh \ +@@ -57,76 +39,18 @@ m4/libtool.m4 # Additional dependencies for configure, due to the use of autoconf --trace. -$(srcdir)/configure: $(srcdir)/gettext-runtime/configure.ac $(srcdir)/gettext-tools/configure.ac -+$(srcdir)/configure: $(srcdir)/gettext-runtime/configure.ac ++$(srcdir)/configure: $(srcdir)/gettext-runtime/configure.ac # Verify that some files are the same. distcheck-hook: -+ -+distcheck-hook-disable: - cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in - cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot - cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed -diff -r fc8ef26fbd29 Makefile.in ---- a/Makefile.in Fri Apr 22 23:17:46 2016 +0100 -+++ b/Makefile.in Fri Apr 22 23:20:55 2016 +0100 -@@ -312,7 +312,7 @@ - top_srcdir = @top_srcdir@ - AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies - ACLOCAL_AMFLAGS = -I m4 --SUBDIRS = gnulib-local gettext-runtime gettext-tools -+SUBDIRS = gnulib-local gettext-runtime - changelog_etc = \ - gettext-runtime/ChangeLog.0 \ - gettext-runtime/doc/ChangeLog.0 \ -@@ -839,6 +839,8 @@ +- cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in +- cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot +- cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed +- cmp -s gettext-runtime/po/quot.sed gettext-tools/po/quot.sed +- cmp -s gettext-runtime/po/en@quot.header gettext-tools/po/en@quot.header +- cmp -s gettext-runtime/po/en@boldquot.header gettext-tools/po/en@boldquot.header +- cmp -s gettext-runtime/po/insert-header.sin gettext-tools/po/insert-header.sin +- cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/po/remove-potcdate.sin +- cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/examples/po/remove-potcdate.sin +- cmp -s gettext-runtime/m4/codeset.m4 gettext-tools/gnulib-m4/codeset.m4 +- cmp -s gettext-runtime/m4/extern-inline.m4 gettext-tools/gnulib-m4/extern-inline.m4 +- cmp -s gettext-runtime/m4/fcntl-o.m4 gettext-tools/gnulib-m4/fcntl-o.m4 +- cmp -s gettext-runtime/m4/gettext.m4 gettext-tools/gnulib-m4/gettext.m4 +- cmp -s gettext-runtime/m4/glibc2.m4 gettext-tools/gnulib-m4/glibc2.m4 +- cmp -s gettext-runtime/m4/glibc21.m4 gettext-tools/gnulib-m4/glibc21.m4 +- cmp -s gettext-runtime/m4/iconv.m4 gettext-tools/gnulib-m4/iconv.m4 +- cmp -s gettext-runtime/m4/intdiv0.m4 gettext-tools/gnulib-m4/intdiv0.m4 +- cmp -s gettext-runtime/m4/intl.m4 gettext-tools/gnulib-m4/intl.m4 +- cmp -s gettext-runtime/m4/intldir.m4 gettext-tools/gnulib-m4/intldir.m4 +- cmp -s gettext-runtime/m4/intlmacosx.m4 gettext-tools/gnulib-m4/intlmacosx.m4 +- cmp -s gettext-runtime/m4/intmax.m4 gettext-tools/gnulib-m4/intmax.m4 +- cmp -s gettext-runtime/m4/inttypes-pri.m4 gettext-tools/gnulib-m4/inttypes-pri.m4 +- cmp -s gettext-runtime/m4/inttypes_h.m4 gettext-tools/gnulib-m4/inttypes_h.m4 +- cmp -s gettext-runtime/m4/lcmessage.m4 gettext-tools/gnulib-m4/lcmessage.m4 +- cmp -s gettext-runtime/m4/lock.m4 gettext-tools/gnulib-m4/lock.m4 +- cmp -s gettext-runtime/m4/longlong.m4 gettext-tools/gnulib-m4/longlong.m4 +- cmp -s gettext-runtime/m4/nls.m4 gettext-tools/gnulib-m4/nls.m4 +- cmp -s gettext-runtime/m4/po.m4 gettext-tools/gnulib-m4/po.m4 +- cmp -s gettext-runtime/m4/gettext.m4 gettext-tools/gnulib-m4/gettext.m4 +- cmp -s gettext-runtime/m4/printf-posix.m4 gettext-tools/gnulib-m4/printf-posix.m4 +- cmp -s gettext-runtime/m4/progtest.m4 gettext-tools/gnulib-m4/progtest.m4 +- cmp -s gettext-runtime/m4/size_max.m4 gettext-tools/gnulib-m4/size_max.m4 +- cmp -s gettext-runtime/m4/stdint_h.m4 gettext-tools/gnulib-m4/stdint_h.m4 +- cmp -s gettext-runtime/m4/threadlib.m4 gettext-tools/gnulib-m4/threadlib.m4 +- cmp -s gettext-runtime/m4/uintmax_t.m4 gettext-tools/gnulib-m4/uintmax_t.m4 +- cmp -s gettext-runtime/m4/visibility.m4 gettext-tools/gnulib-m4/visibility.m4 +- cmp -s gettext-runtime/m4/wchar_t.m4 gettext-tools/gnulib-m4/wchar_t.m4 +- cmp -s gettext-runtime/m4/wint_t.m4 gettext-tools/gnulib-m4/wint_t.m4 +- cmp -s gettext-runtime/m4/xsize.m4 gettext-tools/gnulib-m4/xsize.m4 +- cmp -s gettext-runtime/libasprintf/gnulib-m4/intmax_t.m4 gettext-tools/gnulib-m4/intmax_t.m4 +- test "`sed 1,17d gettext-runtime/intl/config.charset | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/config.charset | md5sum`" +- test "`sed 1,16d gettext-runtime/intl/localcharset.h | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/localcharset.h | md5sum`" +- test "`sed 1,16d gettext-runtime/intl/localcharset.c | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/localcharset.c | md5sum`" +- test "`sed 1,16d gettext-runtime/intl/localename.c | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/localename.c | md5sum`" +- test "`sed 1,15d gettext-runtime/intl/lock.h | md5sum`" = "`sed 1,15d gettext-tools/gnulib-lib/glthread/lock.h | md5sum`" +- test "`sed 1,15d gettext-runtime/intl/lock.c | md5sum`" = "`sed -e 1,15d -e 's,glthread/,,g' gettext-tools/gnulib-lib/glthread/lock.c | md5sum`" +- test "`sed 1,16d gettext-runtime/intl/verify.h | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/verify.h | md5sum`" + cmp -s gettext-runtime/intl/printf-args.h gettext-runtime/libasprintf/printf-args.h + cmp -s gettext-runtime/intl/printf-args.c gettext-runtime/libasprintf/printf-args.c + cmp -s gettext-runtime/intl/printf-parse.h gettext-runtime/libasprintf/printf-parse.h + cmp -s gettext-runtime/intl/printf-parse.c gettext-runtime/libasprintf/printf-parse.c + cmp -s gettext-runtime/intl/verify.h gettext-runtime/libasprintf/verify.h +- test "`sed 1,16d gettext-runtime/intl/ref-add.sin | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/ref-add.sin | md5sum`" +- test "`sed 1,16d gettext-runtime/intl/ref-del.sin | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/ref-del.sin | md5sum`" +- test "`sed 1,18d gettext-runtime/intl/relocatable.h | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.h | md5sum`" +- test "`sed 1,18d gettext-runtime/intl/relocatable.c | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.c | md5sum`" + cmp -s gettext-runtime/intl/vasnprintf.h gettext-runtime/libasprintf/vasnprintf.h +- test "`sed 1,16d gettext-runtime/intl/vasnprintf.c | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/vasnprintf.c | md5sum`" + cmp -s gettext-runtime/intl/vasnprintf.c gettext-runtime/libasprintf/vasnprintf.c + cmp -s gettext-runtime/intl/xsize.h gettext-runtime/libasprintf/xsize.h +- test "`sed 1,16d gettext-runtime/intl/xsize.h | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/xsize.h | md5sum`" +- cmp -s gettext-runtime/man/help2man gettext-tools/man/help2man +- cmp -s gettext-runtime/man/x-to-1.in gettext-tools/man/x-to-1.in +- cmp -s gettext-runtime/libasprintf/texi2html gettext-tools/doc/texi2html +- cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.java gettext-tools/examples/hello-java-swing/m4/TestAWT.java +- cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.class gettext-tools/examples/hello-java-swing/m4/TestAWT.class + test "`sed 1,15d gnulib-local/lib/alloca.in.h | md5sum`" = "`sed 1,15d gettext-runtime/libasprintf/alloca.in.h | md5sum`" - # Verify that some files are the same. - distcheck-hook: -+ -+distcheck-hook-disable: - cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in - cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot - cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed + # DJGPP port. diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/glew-makefile 3depict-0.0.20/packaging/mingw-debian-cross/patches/glew-makefile --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/glew-makefile 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/glew-makefile 2017-01-30 01:30:51.000000000 +0000 @@ -27,13 +27,28 @@ BINDIR ?= $(GLEW_DEST)/bin LIBDIR ?= $(GLEW_DEST)/lib INCDIR ?= $(GLEW_DEST)/include/GL +@@ -151,12 +151,12 @@ + VISUALINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(VISUALINFO.BIN.SRC))) + VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o) + +-# Don't build glewinfo or visualinfo for NaCL, yet. ++# Don't build glewinfo or visualinfo + + ifneq ($(filter nacl%,$(SYSTEM)),) + glew.bin: glew.lib bin + else +-glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) ++glew.bin: glew.lib bin + endif + + bin: diff -r 9bbbd8b43e5b config/Makefile.mingw --- a/config/Makefile.mingw Sun Jun 29 17:24:13 2014 +0100 +++ b/config/Makefile.mingw Sun Jun 29 17:25:52 2014 +0100 @@ -1,7 +1,4 @@ NAME = glew32 -# use gcc for linking, with ld it does not work --CC := gcc +-CC := gcc -fno-builtin -LD := gcc LN := CFLAGS.SO = -DGLEW_BUILD diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/glew-makefile.base 3depict-0.0.20/packaging/mingw-debian-cross/patches/glew-makefile.base --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/glew-makefile.base 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/glew-makefile.base 2017-01-30 01:30:51.000000000 +0000 @@ -27,13 +27,28 @@ BINDIR ?= $(GLEW_DEST)/bin LIBDIR ?= $(GLEW_DEST)/lib INCDIR ?= $(GLEW_DEST)/include/GL +@@ -151,12 +151,12 @@ + VISUALINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(VISUALINFO.BIN.SRC))) + VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o) + +-# Don't build glewinfo or visualinfo for NaCL, yet. ++# Don't build glewinfo or visualinfo + + ifneq ($(filter nacl%,$(SYSTEM)),) + glew.bin: glew.lib bin + else +-glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) ++glew.bin: glew.lib bin + endif + + bin: diff -r 9bbbd8b43e5b config/Makefile.mingw --- a/config/Makefile.mingw Sun Jun 29 17:24:13 2014 +0100 +++ b/config/Makefile.mingw Sun Jun 29 17:25:52 2014 +0100 @@ -1,7 +1,4 @@ NAME = glew32 -# use gcc for linking, with ld it does not work --CC := gcc +-CC := gcc -fno-builtin -LD := gcc LN := CFLAGS.SO = -DGLEW_BUILD diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-disable-things 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-disable-things --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-disable-things 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-disable-things 2017-01-30 01:30:51.000000000 +0000 @@ -1,6 +1,6 @@ -diff -r 5d7a3ac5d87d CMakeLists.txt ---- a/CMakeLists.txt Sat Apr 23 01:11:46 2016 +0100 -+++ b/CMakeLists.txt Sat Apr 23 01:14:12 2016 +0100 +diff -r 943ad5d7d898 CMakeLists.txt +--- a/CMakeLists.txt Sun Jan 29 19:44:20 2017 +0000 ++++ b/CMakeLists.txt Sun Jan 29 19:47:00 2017 +0000 @@ -94,17 +94,17 @@ set(MGL_LIB_INSTALL_DIR "lib" CACHE STRING "Set library install directory") string(TIMESTAMP MGL_NIGHT "%d.%m.%y") @@ -27,18 +27,23 @@ option(enable-openmp "Enable OpenMP support" OFF) if(enable-pthread AND enable-openmp) -@@ -114,7 +114,7 @@ +@@ -113,8 +113,8 @@ + option(enable-lgpl "Enable only LGPL part of MathGL") option(enable-mgl2 "Use names 'libmgl2-*' instead of 'libmgl-*'") - option(enable-ltdl "Enable loading modules support" ON) +-option(enable-ltdl "Enable loading modules support" ON) -CMAKE_DEPENDENT_OPTION(enable-doc-site "Enable HTML documentation for website" OFF "NOT enable-all-docs" ON) ++option(enable-ltdl "Enable loading modules support" OFF) +CMAKE_DEPENDENT_OPTION(enable-doc-site "Enable HTML documentation for website" OFF "NOT enable-all-docs" O) CMAKE_DEPENDENT_OPTION(enable-doc-html "Enable HTML documentation" OFF "NOT enable-all-docs" ON) CMAKE_DEPENDENT_OPTION(enable-doc-info "Enable INFO documentation" OFF "NOT enable-all-docs" ON) CMAKE_DEPENDENT_OPTION(enable-doc-pdf-ru "Enable Russian PDF documentation" OFF "NOT enable-all-docs" ON) -@@ -128,16 +128,16 @@ +@@ -126,18 +126,18 @@ + + CMAKE_DEPENDENT_OPTION(enable-zlib "Enable zlib support" ON "NOT enable-all" ON) CMAKE_DEPENDENT_OPTION(enable-png "Enable png support" ON "NOT enable-all" ON) - CMAKE_DEPENDENT_OPTION(enable-jpeg "Enable jpeg support" ON "NOT enable-all" ON) +-CMAKE_DEPENDENT_OPTION(enable-jpeg "Enable jpeg support" ON "NOT enable-all" ON) ++CMAKE_DEPENDENT_OPTION(enable-jpeg "Enable jpeg support" OFF "NOT enable-all" ON) MGL_DEPENDENT_OPTION(enable-gsl "Enable gsl support" ON "NOT enable-lgpl" ON "NOT enable-all" ON) -MGL_DEPENDENT_OPTION(enable-hdf4 "Enable hdf4 support" ON "NOT enable-lgpl" ON "NOT enable-all" ON) -MGL_DEPENDENT_OPTION(enable-hdf5 "Enable hdf5 support" ON "NOT enable-lgpl" ON "NOT enable-all" ON) @@ -80,3 +85,12 @@ include_directories( ${MathGL_SOURCE_DIR}/include ${MathGL_BINARY_DIR}/include) set(MGL_INCLUDE_PATH "${CMAKE_INSTALL_PREFIX}/include/mgl2") +@@ -263,6 +263,8 @@ + set(MGL_HAVE_OMP 1) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") ++ set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fopenmp ") ++ + else(OPENMP_FOUND) + message(SEND_ERROR "Couldn't find OpenMP. You can enable POSIX threads instead.") + set(MGL_HAVE_OMP 0) diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-disable-widgets 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-disable-widgets --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-disable-widgets 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-disable-widgets 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -diff -r 87e795f6a771 Makefile.am ---- a/Makefile.am Sat Nov 16 16:45:55 2013 +0100 -+++ b/Makefile.am Sat Nov 16 16:46:30 2013 +0100 -@@ -1,5 +1,5 @@ - ACLOCAL_AMFLAGS = -I config --SUBDIRS = mgl lang widgets utils examples include -+SUBDIRS = mgl lang utils include - - doctargets = - diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-fix-pthread-and-linking 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-fix-pthread-and-linking --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-fix-pthread-and-linking 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-fix-pthread-and-linking 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -diff -r 9fbd31e8af49 CMakeLists.txt ---- a/CMakeLists.txt Sun Sep 20 14:25:16 2015 +0100 -+++ b/CMakeLists.txt Sun Sep 20 14:26:23 2015 +0100 -@@ -12,9 +12,9 @@ - set(MathGL_VERSION_MINOR 2.2) - set(MathGL_SOVERSION 7.2.0) - --set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") --set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro") --set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro") -+set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -lpng") -+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lpng") -+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpng") - - MACRO(MGL_DEPENDENT_OPTION option doc default depends1 force1 depends2 force2) - IF(${option}_ISSET MATCHES "^${option}_ISSET$") -@@ -61,7 +61,7 @@ - - set(MGL_LIB_INSTALL_DIR "lib" CACHE STRING "Set library install directory") - --option(enable-double "Enable double precision in MathGL library" OFF) -+option(enable-double "Enable double precision in MathGL library" ON) - option(enable-simple "Slightly increase drawing speed but disable mglDataA class") - option(enable-mpi "Enable mpi" OFF) - option(enable-opengl "Enable OpenGL support" OFF) -@@ -70,7 +70,7 @@ - option(enable-all "Enable all core features") - option(enable-all-widgets "Enable all Widgets" OFF) - option(enable-all-swig "Enable all SWIG based interfaces" OFF) --option(enable-pthread "Enable POSIX threads support" ON) -+option(enable-pthread "Enable POSIX threads support" OFF) - option(enable-openmp "Enable OpenMP support" OFF) - option(enable-lgpl "Enable only LGPL part of MathGL") - option(enable-mgl2 "Use names 'libmgl2-*' instead of 'libmgl-*'") diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-openmp-linker-flag 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-openmp-linker-flag --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/mathgl-openmp-linker-flag 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/mathgl-openmp-linker-flag 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index b369da1..0bc7547 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -219,6 +219,8 @@ if(enable-openmp) - set(MGL_HAVE_OMP 1) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -+ set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fopenmp ") -+ - else(OPENMP_FOUND) - message(SEND_ERROR "Couldn't find OpenMP. You can enable POSIX threads instead.") - set(MGL_HAVE_OMP 0) diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/qhull-2009-configure_ac.patch 3depict-0.0.20/packaging/mingw-debian-cross/patches/qhull-2009-configure_ac.patch --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/qhull-2009-configure_ac.patch 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/qhull-2009-configure_ac.patch 2017-01-30 01:30:51.000000000 +0000 @@ -0,0 +1,12 @@ +diff -r cd83d3689742 configure.ac +--- a/configure.ac Sun Jan 29 20:09:34 2017 +0000 ++++ b/configure.ac Sun Jan 29 20:13:28 2017 +0000 +@@ -8,7 +8,7 @@ + AC_CONFIG_AUX_DIR(config) + AC_CONFIG_MACRO_DIR(config) + +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign]) + + AC_PROG_CC + AC_PROG_LIBTOOL diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/vigra-cpp-version.patch 3depict-0.0.20/packaging/mingw-debian-cross/patches/vigra-cpp-version.patch --- 3depict-0.0.19-1/packaging/mingw-debian-cross/patches/vigra-cpp-version.patch 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/patches/vigra-cpp-version.patch 2017-01-30 01:30:51.000000000 +0000 @@ -0,0 +1,15 @@ +diff -r 54fd61517735 CMakeLists.txt +--- a/CMakeLists.txt Sun Jan 29 18:46:17 2017 +0000 ++++ b/CMakeLists.txt Sun Jan 29 18:46:41 2017 +0000 +@@ -163,8 +163,9 @@ + include(VigraConfigureThreading) + + # Should come after VigraDetectThreading, since that updates the -std flag. +-include(VigraDetectCppVersion) +-VIGRA_DETECT_CPP_VERSION() ++#include(VigraDetectCppVersion) ++#VIGRA_DETECT_CPP_VERSION() ++SET(VIGRA_CPP_VERSION "201402") + + IF(WITH_VIGRANUMPY) + FIND_PACKAGE(VIGRANUMPY_DEPENDENCIES) diff -Nru 3depict-0.0.19-1/packaging/mingw-debian-cross/windows-installer.nsi 3depict-0.0.20/packaging/mingw-debian-cross/windows-installer.nsi --- 3depict-0.0.19-1/packaging/mingw-debian-cross/windows-installer.nsi 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/packaging/mingw-debian-cross/windows-installer.nsi 2017-01-21 12:42:11.000000000 +0000 @@ -2,7 +2,7 @@ ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "3Depict" -!define PRODUCT_VERSION "0.0.19" +!define PRODUCT_VERSION "0.0.20" !define PRODUCT_PUBLISHER "D. Haley, A. Ceguerra" !define PRODUCT_WEB_SITE "http://threedepict.sourceforge.net" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\3Depict.exe" Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/packaging/packaging/.howToRelease.txt.swp and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/packaging/packaging/.howToRelease.txt.swp differ diff -Nru 3depict-0.0.19-1/packaging/RPM/3Depict-0.0.19-upstream-effd078610a7.patch 3depict-0.0.20/packaging/RPM/3Depict-0.0.19-upstream-effd078610a7.patch --- 3depict-0.0.19-1/packaging/RPM/3Depict-0.0.19-upstream-effd078610a7.patch 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/packaging/RPM/3Depict-0.0.19-upstream-effd078610a7.patch 2017-01-14 20:51:13.000000000 +0000 @@ -0,0 +1,1235 @@ +diff -r bcb9acfa66de -r effd078610a7 docs/manual-latex/build-latex.sh +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ docs/manual-latex/build-latex.sh Tue Jun 21 12:45:20 2016 +0100 +@@ -0,0 +1,37 @@ ++#!/bin/bash ++LATEXBIN=pdflatex ++BIBTEXBIN=bibtex ++if [ x`which $LATEXBIN` == x"" ] ; then ++ echo "no $LATEXBIN" ++ exit 1 ++fi ++ ++if [ x`which $BIBTEXBIN` == x"" ] ; then ++ echo "no $BIBTEXBIN" ++ exit 1 ++fi ++ ++MANUAL=manual.tex ++ ++#check to see if the manual and its bib file are around ++if [ ! -f $MANUAL ] ; then ++ echo "$MANUAL is missing" ++ exit 1 ++fi ++ ++#Remove the old manul ++rm -f manual.pdf ++ ++ ++ ++#run the multi-pass latex build. ++$LATEXBIN $MANUAL || { echo "failed latex build (pass 1 of 2)"; exit 1 ; } ++$BIBTEXBIN `basename -s .tex $MANUAL` || { echo "failed bibtex build"; exit 1 ; } ++$LATEXBIN $MANUAL || { echo "failed latex build (pass 2 of 2)"; exit 1 ; } ++ ++ ++if [ ! -f manual.pdf ] ; then ++ echo "latex ran, but somehow we did not output the PDF...." ++ exit 1 ++fi ++ +diff -r bcb9acfa66de -r effd078610a7 src/backend/filter.cpp +--- src/backend/filter.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filter.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -553,7 +553,7 @@ + ASSERT(scatterIntensity.empty()); + + +- ASSERT(plotType < PLOT_TYPE_ENUM_END); ++ ASSERT(plotStyle < PLOT_TYPE_ENUM_END); + } + void RangeStreamData::checkSelfConsistent() const + { +diff -r bcb9acfa66de -r effd078610a7 src/backend/filter.h +--- src/backend/filter.h Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filter.h Tue Jun 21 12:45:20 2016 +0100 +@@ -395,7 +395,7 @@ + //Label for X, Y axes + std::string xLabel,yLabel; + +- unsigned int plotType; ++ unsigned int plotStyle; + + //!Structured XY data pairs for plotting curve + Array2D xyData; +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/algorithms/rdf.cpp +--- src/backend/filters/algorithms/rdf.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/algorithms/rdf.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -862,6 +862,8 @@ + return RDF_ABORT_FAIL; + #endif + ++ *progressPtr=100; ++ + return 0; + } + +@@ -1003,6 +1005,8 @@ + #endif + + //Calculations complete! ++ *progressPtr=100; ++ + return 0; + } + +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/annotation.cpp +--- src/backend/filters/annotation.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/annotation.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -167,8 +167,15 @@ + + //If we are not enabled, do not draw anything into the output + if(!active) ++ { ++ progress.filterProgress=100; + return 0; ++ } + ++ progress.step=1; ++ progress.maxStep=1; ++ progress.stepName=TRANS("Draw"); ++ + DrawStreamData *d; + d = new DrawStreamData; + d->parent=this; +@@ -505,6 +512,7 @@ + d->cached=0; + getOut.push_back(d); + ++ progress.filterProgress=100; + return 0; + } + +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/boundingBox.cpp +--- src/backend/filters/boundingBox.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/boundingBox.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -510,7 +510,6 @@ + } + #endif + bTotal.expand(bThis); +- progress.filterProgress=100; + break; + } + default: +@@ -521,6 +520,7 @@ + getOut.push_back(dataIn[ui]); + } + ++ progress.filterProgress=100; + //Append the bounding box if it is valid + if(bTotal.isValid()) + { +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/clusterAnalysis.cpp +--- src/backend/filters/clusterAnalysis.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/clusterAnalysis.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -685,7 +685,7 @@ + Plot2DStreamData *p = new Plot2DStreamData; + p->parent=this; + +- p->plotType=PLOT_2D_SCATTER; ++ p->plotStyle=PLOT_2D_SCATTER; + p->dataLabel=TRANS("Morphology Plot"); + p->xLabel=TRANS("\\lambda_1:\\lambda_2 ratio"); + p->yLabel=TRANS("\\lambda_2:\\lambda_3 ratio"); +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/ionColour.cpp +--- src/backend/filters/ionColour.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/ionColour.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -271,12 +271,14 @@ + + + p.name=TRANS("Show Bar"); ++ p.helpText=TRANS("Display the colour legend in the 3D view"); + p.key=KEY_IONCOLOURFILTER_SHOWBAR; + p.data=boolStrEnc(showColourBar); + p.type=PROPERTY_TYPE_BOOL; + propertyList.addProperty(p,curGroup); + + p.name=TRANS("Opacity"); ++ p.helpText=TRANS("How see-through to make the legend (0- transparent, 1- solid)"); + p.key=KEY_IONCOLOURFILTER_ALPHA; + stream_cast(p.data,alpha); + p.type=PROPERTY_TYPE_REAL; +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/ionDownsample.cpp +--- src/backend/filters/ionDownsample.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/ionDownsample.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -88,7 +88,7 @@ + rsdIncoming = new RangeStreamData; + *rsdIncoming=*c; + +- if(ionFractions.size() != c->rangeFile->getNumIons()) ++ if(ionFractions.size() != c->rangeFile->getNumIons()+1) + { + //set up some defaults; seeded from normal + ionFractions.resize(c->rangeFile->getNumIons()+1,fraction); +@@ -464,7 +464,8 @@ + + propertyList.setGroupTitle(curGroup,TRANS("Mode")); + curGroup++; +- if(rsdIncoming && perSpecies) ++ ++ if(rsdIncoming && perSpecies && rsdIncoming->enabledIons.size()) + { + unsigned int typeVal; + if(fixedNumOut) +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/ionInfo.cpp +--- src/backend/filters/ionInfo.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/ionInfo.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -398,7 +398,7 @@ + + + //"Pairwise events" - where we perform an action if both +- //These ++ //these are set + if(wantIonCounts && wantVolume) + { + if(computedVol > sqrtf(std::numeric_limits::epsilon())) +@@ -420,6 +420,9 @@ + } + } + ++ ++ progress.filterProgress=100; ++ + return 0; + } + +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/spatialAnalysis.cpp +--- src/backend/filters/spatialAnalysis.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/spatialAnalysis.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -655,115 +655,180 @@ + return ERR_FILE_READ_FAIL; + + +- +- progress.step=3; +- progress.stepName=TRANS("Build"); +- progress.filterProgress=0; +- +- //Build the search tree we will use to perform replacement +- K3DTreeMk2 tree; +- tree.resetPts(fileIons,false); +- if(!tree.build()) +- return ERR_ABORT_FAIL; +- BoundCube b; +- tree.getBoundCube(b); +- +- //map the offset of the nearest to +- //the tree ID +- vector nearestVec; +- nearestVec.resize(inIons.size()); +- +- //TODO: pair vector might be faster +- // as we can use it in sequence, and can use openmp +- map matchedMap; +- +- //Find the nearest point for all points in the dataset +- +- #pragma omp parallel for +- for(size_t ui=0;ui outIons; ++ if(inIons.empty() || fileIons.empty()) + { +- nearestVec[ui]=tree.findNearestUntagged(inIons[ui].getPos(),b,false); +- } +- +- float sqrReplaceTol=replaceTolerance*replaceTolerance; +- +- //Filter this to only points that had an NN within range +- #pragma omp parallel for +- for(size_t ui=0;ui outIons; +- switch(replaceMode) +- { +- case REPLACE_MODE_SUBTRACT: ++ ++ progress.step=3; ++ progress.stepName=TRANS("Build"); ++ progress.filterProgress=0; ++ ++ //TODO: Possible speed increase by finding the smaller of ++ // the two inputs, and using that to build the tree ++ ++ //Build the search tree we will use to perform replacement ++ K3DTreeMk2 tree; ++ tree.resetPts(fileIons,false); ++ if(!tree.build()) ++ return ERR_ABORT_FAIL; ++ BoundCube b; ++ tree.getBoundCube(b); ++ ++ //map the offset of the nearest to ++ //the tree ID ++ vector nearestVec; ++ nearestVec.resize(inIons.size()); ++ ++ //TODO: pair vector might be faster ++ // as we can use it in sequence, and can use openmp ++ map matchedMap; ++ ++ //Find the nearest point for all points in the dataset ++ // maps the ith ion in "inions" to the tree value ++ #pragma omp parallel for ++ for(size_t ui=0;ui matchedMap.size()) +- outIons.reserve(inIons.size()-matchedMap.size()); +- +- // +- #pragma omp parallel for +- for(unsigned int ui=0;ui::iterator it; +- it=matchedMap.find(ui); +- if(it != matchedMap.end()) +- continue; +- + #pragma omp critical +- outIons.push_back(inIons[ui]); ++ matchedMap[ui]=tree.getOrigIndex(nearestVec[ui]); + } +- break; + } +- case REPLACE_MODE_INTERSECT: ++ ++ nearestVec.clear(); ++ ++ ++ progress.step=4; ++ progress.stepName=TRANS("Compute"); ++ progress.filterProgress=0; ++ ++ ++ //now we have a map that matches as so: ++ // map ( "inIon" ID -> "fileIon" ID) ++ // inIon should be our "A" in "A operator B" ++ switch(replaceMode) + { +- outIons.reserve(matchedMap.size()); +- +- if(replaceMass) ++ case REPLACE_MODE_SUBTRACT: + { +- for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ //If no matches, A-0 = A. Just return input ++ if(matchedMap.empty()) + { +- outIons.push_back(fileIons[it->second]); +- ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); ++ outIons.swap(inIons); ++ break; + } ++ //In subtraction mode, we should have ++ // at least this many ions ++ if(inIons.size() > matchedMap.size()) ++ outIons.reserve(inIons.size()-matchedMap.size()); ++ ++ // ++ #pragma omp parallel for ++ for(unsigned int ui=0;ui::iterator it; ++ it=matchedMap.find(ui); ++ if(it != matchedMap.end()) ++ continue; ++ ++ #pragma omp critical ++ outIons.push_back(inIons[ui]); ++ } ++ break; + } +- else ++ case REPLACE_MODE_INTERSECT: + { +- for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ //Finish if no matches ++ if(matchedMap.empty()) ++ break; ++ ++ outIons.reserve(matchedMap.size()); ++ ++ if(replaceMass) + { +- outIons.push_back(inIons[it->first]); ++ for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ { ++ outIons.push_back(fileIons[it->second]); ++ ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); ++ } + } ++ else ++ { ++ for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) ++ { ++ outIons.push_back(inIons[it->first]); ++ } ++ } ++ break; + } +- break; ++ case REPLACE_MODE_UNION: ++ { ++ outIons.swap(fileIons); ++ outIons.reserve(outIons.size() + fileIons.size() - matchedMap.size()); ++ map::const_iterator it=matchedMap.begin(); ++ ++ ++ for(unsigned int ui=0;uifirst == ui) ) ++ { ++ it++; ++ continue; ++ } ++ ++ ++ outIons.push_back(inIons[ui]); ++ } ++ ++ ++ break; ++ } ++ default: ++ ASSERT(false); + } +- case REPLACE_MODE_UNION: +- { +- ASSERT(false); +- break; +- } +- default: +- ASSERT(false); + } + + //Only output ions if any were found +@@ -2779,6 +2844,8 @@ + newD->data.resize(d->data.size()); + if(stopMode == STOP_MODE_NEIGHBOUR) + { ++ unsigned int nProg=0; ++ + bool spin=false; + #pragma omp parallel for shared(spin) + for(size_t uj=0;ujdata.size();uj++) +@@ -2811,14 +2878,15 @@ + } + + res.clear(); ++ #pragma atomic ++ nProg++; + + //Update progress as needed + if(!curProg--) + { + #pragma omp critical + { +- n+=NUM_CALLBACK/(nnMax); +- progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); ++ progress.filterProgress= (unsigned int)(((float)nProg/(float)totalDataSize)*100.0f); + if(*Filter::wantAbort) + spin=true; + curProg=NUM_CALLBACK/(nnMax); +@@ -3063,9 +3131,10 @@ + IonStreamData *newD = new IonStreamData; + newD->parent=this; + +- //Adjust this number to provide more update thanusual, because we ++ //Adjust this number to provide more update than usual, because we + //are not doing an o(1) task between updates; yes, it is a hack +- unsigned int curProg=NUM_CALLBACK/(10*nnMax); ++ const unsigned int PROG_PER_PASS=NUM_CALLBACK/(10*nnMax); ++ unsigned int curProg=PROG_PER_PASS; + newD->data.reserve(d->data.size()); + if(stopMode == STOP_MODE_NEIGHBOUR) + { +@@ -3113,11 +3182,11 @@ + { + #pragma omp critical + { +- n+=NUM_CALLBACK/(nnMax); ++ n+=PROG_PER_PASS; + progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); + if(*Filter::wantAbort) + spin=true; +- curProg=NUM_CALLBACK/(nnMax); ++ curProg=PROG_PER_PASS; + } + } + } +@@ -3263,6 +3332,8 @@ + break; + } + } ++ progress.filterProgress=100; ++ + //If we have bad points, let the user know. + if(!badPts.empty()) + { +@@ -4230,11 +4301,8 @@ + } + + //distance between search pt and found pt +- float sqrDistance; +- sqrDistance = searchTree.getPtRef(ptIdx).sqrDist(pSource[ui].getPosRef()); +- +- if(sqrDistance > DISTANCE_EPSILON) +- ptsFound.insert(ptIdx); ++ ++ ptsFound.insert(ptIdx); + } + + +@@ -4244,8 +4312,14 @@ + //Count the number of numerator and denominator ions, using the masses we set aside earlier + for(set::iterator it=ptsFound.begin(); it!=ptsFound.end(); ++it) + { ++ ++ //check that the distance is non-zero, to force no self-matching ++ float sqrDistance; ++ sqrDistance = searchTree.getPtRef(*it).sqrDist(pSource[ui].getPosRef()); ++ if(sqrDistance < DISTANCE_EPSILON) ++ continue; ++ + float ionMass; +- //check that the distance is non-zero, to force no self-matching + ionMass = dataMasses[searchTree.getOrigIndex(*it)]; + + unsigned int ionID; +@@ -4326,9 +4400,11 @@ + bool nnHistogramTest(); + bool rdfPlotTest(); + bool axialDistTest(); +-bool replaceTest(); ++bool replaceIntersectAndUnionTest(); + bool localConcTestRadius(); + bool localConcTestNN(); ++bool replaceSubtractTest(); ++bool replaceUnionTest(); + + bool SpatialAnalysisFilter::runUnitTests() + { +@@ -4343,8 +4419,15 @@ + + if(!axialDistTest()) + return false; +- if(!replaceTest()) ++ if(!replaceIntersectAndUnionTest()) + return false; ++ ++ if(!replaceSubtractTest()) ++ return false; ++ ++ if(!replaceUnionTest()) ++ return false; ++ + if(!localConcTestRadius()) + return false; + +@@ -4617,7 +4700,7 @@ + return true; + } + +-bool replaceTest() ++bool replaceIntersectAndUnionTest() + { + std::string ionFile=createTmpFilename(NULL,".pos"); + +@@ -4637,6 +4720,157 @@ + //Create a spatial analysis filter + SpatialAnalysisFilter *f=new SpatialAnalysisFilter; + f->setCaching(false); ++ //Set it to do a union calculation ++ bool needUp; ++ string s; ++ s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); ++ TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); ++ TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); ++ s="1"; ++ TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); ++ ++ vector opVec; ++ opVec.push_back(REPLACE_MODE_INTERSECT); ++ opVec.push_back(REPLACE_MODE_UNION); ++ ++ ProgressData p; ++ vector streamIn,streamOut; ++ streamIn.push_back(d); ++ for(unsigned int opId=0;opIdsetProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); ++ ++ //Do the refresh ++ TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); ++ ++ TEST(streamOut.size() == 1,"stream count"); ++ TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); ++ TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); ++ ++ //we should have taken the mass-to-charge from the file ++ const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; ++ for(unsigned int ui=0;uidata[ui].getMassToCharge() == 1); ++ } ++ delete streamOut[0]; ++ streamOut.clear(); ++ } ++ delete f; ++ delete d; ++ ++ wxRemoveFile(ionFile); ++ ++ ++ return true; ++} ++ ++bool replaceSubtractTest() ++{ ++ std::string ionFile=createTmpFilename(NULL,".pos"); ++ ++ vector ions; ++ const unsigned int NIONS=10; ++ const unsigned int DIFF_COUNT=5; ++ for(unsigned int ui=0;ui tmpI; ++ for(unsigned int ui=0;uidata.swap(ions); ++ ++ //Create a spatial analysis filter ++ SpatialAnalysisFilter *f=new SpatialAnalysisFilter; ++ f->setCaching(false); ++ ++ //Set it to do a subtraction calculation ++ bool needUp; ++ string s; ++ s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); ++ TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); ++ TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); ++ s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_SUBTRACT]); ++ TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); ++ ++ //Do the refresh ++ ProgressData p; ++ vector streamIn,streamOut; ++ streamIn.push_back(d); ++ TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); ++ delete f; ++ delete d; ++ streamIn.clear(); ++ ++ TEST(streamOut.size() == 1,"stream count"); ++ TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); ++ TEST(streamOut[0]->getNumBasicObjects() == DIFF_COUNT,"Number objects"); ++ ++ //we should have taken the mass-to-charge from the original data, ++ // not the file ++ const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; ++ for(unsigned int ui=0;uigetNumBasicObjects(); ui++) ++ { ++ ASSERT(outIons->data[ui].getMassToCharge() == 1); ++ ASSERT(outIons->data[ui].getPos()[2] >= 0); ++ } ++ ++ wxRemoveFile(ionFile); ++ ++ delete streamOut[0]; ++ ++ return true; ++} ++ ++bool replaceUnionTest() ++{ ++ std::string ionFile=createTmpFilename(NULL,".pos"); ++ ++ //"B" dataset ++ vector ions; ++ ions.push_back(IonHit(Point3D(0,0,0),1)); ++ ions.push_back(IonHit(Point3D(1,0,1),1)); ++ ions.push_back(IonHit(Point3D(0,1,1),1)); ++ ++ IonHit::makePos(ions,ionFile.c_str()); ++ ions.clear(); ++ ++ //"A" dataset ++ ions.push_back(IonHit(Point3D(0,0,0),2)); ++ ions.push_back(IonHit(Point3D(1,0,-1),2)); ++ ions.push_back(IonHit(Point3D(0,1,-1),2)); ++ ++ ++ IonStreamData *d = new IonStreamData; ++ d->data.swap(ions); ++ ++ //Create a spatial analysis filter ++ SpatialAnalysisFilter *f=new SpatialAnalysisFilter; ++ f->setCaching(false); + + //Set it to do a union calculation + bool needUp; +@@ -4644,13 +4878,11 @@ + s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); + TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); + TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); +- s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_INTERSECT]); ++ s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_UNION]); + TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); +- + s="1"; + TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); + +- + //Do the refresh + ProgressData p; + vector streamIn,streamOut; +@@ -4662,14 +4894,16 @@ + + TEST(streamOut.size() == 1,"stream count"); + TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); +- TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); +- +- //we should have taken the mass-to-charge from the file ++ TEST(streamOut[0]->getNumBasicObjects() == 5,"Number objects"); ++ ++ //There should be + const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; +- for(unsigned int ui=0;uigetNumBasicObjects(); ui++) + { +- ASSERT(outIons->data[ui].getMassToCharge() == 1); ++ sumV+=outIons->data[ui].getMassToCharge(); + } ++ TEST( EQ_TOL(sumV,7.0f),"mass-to-charge check"); + + wxRemoveFile(ionFile); + +@@ -4678,7 +4912,6 @@ + return true; + } + +- + //--- Local concentration tests -- + const IonStreamData *createLCIonStream() + { +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/spectrumPlot.cpp +--- src/backend/filters/spectrumPlot.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/spectrumPlot.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -517,6 +517,8 @@ + + getOut.push_back(d); + ++ progress.filterProgress=100; ++ + return 0; + } + +diff -r bcb9acfa66de -r effd078610a7 src/backend/filters/transform.cpp +--- src/backend/filters/transform.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/filters/transform.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -998,8 +998,10 @@ + break; + } + ++ } + } +- } ++ ++ progress.filterProgress=100; + } + else + { +@@ -1526,6 +1528,11 @@ + case KEY_CROP_MINIMUM: + { + ASSERT(scalarParams.size() ==2); ++ float tmp; ++ if(stream_cast(tmp,value) || tmp >=scalarParams[1]) ++ return false; ++ ++ + if(!applyPropertyNow(scalarParams[0],value,needUpdate)) + return false; + break; +@@ -1533,6 +1540,9 @@ + case KEY_CROP_MAXIMUM: + { + ASSERT(scalarParams.size() ==2); ++ float tmp; ++ if(stream_cast(tmp,value) || tmp <=scalarParams[0]) ++ return false; + if(!applyPropertyNow(scalarParams[1],value,needUpdate)) + return false; + break; +diff -r bcb9acfa66de -r effd078610a7 src/backend/plot.cpp +--- src/backend/plot.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/plot.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -29,7 +29,7 @@ + NTRANS("Moving avg.") + }; + +-const char *plotTypeStrings[]= { ++const char *traceStyleStrings[]= { + NTRANS("Lines"), + NTRANS("Bars"), + NTRANS("Steps"), +@@ -119,15 +119,15 @@ + string plotString(unsigned int plotMode) + { + ASSERT(plotMode< PLOT_TYPE_ENUM_END); +- return TRANS(plotTypeStrings[plotMode]); ++ return TRANS(traceStyleStrings[plotMode]); + } + + unsigned int plotID(const std::string &plotString) + { +- COMPILE_ASSERT(THREEDEP_ARRAYSIZE(plotTypeStrings) == PLOT_TYPE_ENUM_END); ++ COMPILE_ASSERT(THREEDEP_ARRAYSIZE(traceStyleStrings) == PLOT_TYPE_ENUM_END); + for(unsigned int ui=0;uigetPlotMode(); ++} ++ + void PlotWrapper::getVisibleIDs(vector &visiblePlotIDs ) const + { + +@@ -791,7 +797,7 @@ + if(!plottingData[ui]->visible) + continue; + +- if(plottingData[ui]->getType()!= PLOT_MODE_1D) ++ if(plottingData[ui]->getMode()!= PLOT_MODE_1D) + continue; + + if(((Plot1D*)plottingData[ui])->wantLogPlot()) +@@ -809,7 +815,7 @@ + float minYVal=0.1; + for(size_t ui=0;uivisible || plottingData[ui]->getType() !=PLOT_MODE_1D) ++ if(!plottingData[ui]->visible || plottingData[ui]->getMode() !=PLOT_MODE_1D) + continue; + + float tmp ; +@@ -929,7 +935,7 @@ + Plot2DFunc *curPlot; + curPlot=(Plot2DFunc*)plottingData[ui]; + +- if(curPlot->getType() == PLOT_2D_DENS) ++ if(curPlot->getMode() == PLOT_2D_DENS) + { + wantColourbar=true; + } +@@ -1047,11 +1053,6 @@ + plottingData[plotIDHandler.getPos(plotId)]->regionGroup.getRegion(regionId,region); + } + +-unsigned int PlotWrapper::plotType(unsigned int plotId) const +-{ +- return plottingData[plotIDHandler.getPos(plotId)]->getPlotMode(); +-} +- + + void PlotWrapper::moveRegion(unsigned int plotID, unsigned int regionId, bool regionSelfUpdate, + unsigned int movementType, float newX, float newY) const +@@ -1135,7 +1136,7 @@ + + void PlotBase::copyBase(PlotBase *target) const + { +- target->plotType=plotType; ++ target->traceStyle=traceStyle; + target->minX=minX; + target->maxX=maxX; + target->minY=minY; +@@ -1157,12 +1158,12 @@ + + unsigned int PlotBase::getType() const + { +- return plotType; ++ return traceStyle; + } + + unsigned int PlotBase::getMode() const + { +- switch(plotType) ++ switch(traceStyle) + { + case PLOT_LINE_LINES: + case PLOT_LINE_BARS: +@@ -1181,7 +1182,7 @@ + Plot1D::Plot1D() + { + //Set the default plot properties +- plotType=PLOT_LINE_LINES; ++ traceStyle=PLOT_LINE_LINES; + plotMode=PLOT_MODE_1D; + xLabel=""; + yLabel=""; +@@ -1489,7 +1490,7 @@ + + + //Plot the appropriate form +- switch(plotMode) ++ switch(traceStyle) + { + case PLOT_LINE_LINES: + //Unfortunately, when using line plots, mathgl moves the data points to the plot boundary, +@@ -1632,7 +1633,7 @@ + Plot2DFunc::Plot2DFunc() + { + plotMode = PLOT_MODE_2D; +- plotType=PLOT_2D_DENS; ++ traceStyle=PLOT_2D_DENS; + } + + void Plot2DFunc::setData(const Array2D &a, +@@ -1705,7 +1706,8 @@ + + Plot2DScatter::Plot2DScatter() + { +- plotType=PLOT_2D_SCATTER; ++ plotMode=PLOT_2D_SCATTER; ++ traceStyle=PLOT_LINE_POINTS; + scatterIntensityLog=false; + } + +diff -r bcb9acfa66de -r effd078610a7 src/backend/plot.h +--- src/backend/plot.h Tue May 31 13:04:58 2016 +1000 ++++ src/backend/plot.h Tue Jun 21 12:45:20 2016 +0100 +@@ -217,7 +217,7 @@ + class PlotBase + { + protected: +- //!Sub type of plot (eg lines, bars for 1D) ++ //!Type of plot + unsigned int plotMode; + //!xaxis label + std::string xLabel; +@@ -229,8 +229,9 @@ + //plot colour (for single coloured plots) + float r,g,b; + +- //The type of plot (ie what class is it?) +- unsigned int plotType; ++ //The sub-style of the plot trace (eg lines, points, bars, etc) ++ // FIXME: This is badly named, change to traceStyle, or dataStyle, or something ++ unsigned int traceStyle; + + void copyBase(PlotBase *target) const; + +@@ -297,8 +298,12 @@ + void setStrings(const std::string &x, + const std::string &y,const std::string &t); + ++ //Set the colour of the plot trace + void setColour(float rNew, float gNew, float bNew); + ++ //set the visual style for the trace (dots, lines, etc) ++ void setTraceStyle(unsigned int newStyle) { traceStyle=newStyle;} ++ + std::string getXLabel() const { return xLabel;} + std::string getTitle() const { return title;} + std::string getYLabel() const { return yLabel;} +@@ -309,6 +314,7 @@ + void setPlotMode(unsigned int newMode) { plotMode= newMode;} + + ++ //get the colour of the trace + void getColour(float &r, float &g, float &b) const ; + + #ifdef DEBUG +@@ -613,7 +619,7 @@ + + + //!obtain the type of a plot, given the plot's uniqueID +- unsigned int plotType(unsigned int plotId) const; ++ unsigned int getPlotMode(unsigned int plotId) const; + + //Retrieve the types of visible plots + unsigned int getVisibleMode() const; +diff -r bcb9acfa66de -r effd078610a7 src/backend/viscontrol.cpp +--- src/backend/viscontrol.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/backend/viscontrol.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -249,7 +249,7 @@ + plotData->yLabel,plotData->dataLabel); + + //set the appearance of the plot +- //plotNew->setTraceStyle(plotStyle); ++ plotNew->setTraceStyle(plotData->plotStyle); + plotNew->setColour(plotData->r,plotData->g,plotData->b); + + +@@ -275,7 +275,7 @@ + unsigned int plotID; + + PlotBase *plotNew; +- switch(plotData->plotType) ++ switch(plotData->plotStyle) + { + case PLOT_2D_DENS: + { +diff -r bcb9acfa66de -r effd078610a7 src/common/basics.cpp +--- src/common/basics.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/common/basics.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -1347,7 +1347,8 @@ + while(CFile.good() && !CFile.eof() && atHeader) + { + //Grab a line from the file +- CFile.getline(inBuffer,BUFFER_SIZE); ++ if(!CFile.getline(inBuffer,BUFFER_SIZE)) ++ break; + + if(!CFile.good()) + return ERR_FILE_FORMAT; +@@ -1457,10 +1458,8 @@ + + } + //Grab a line from the file +- CFile.getline(inBuffer,BUFFER_SIZE); +- +- if(!CFile.good() && !CFile.eof()) +- return ERR_FILE_FORMAT; ++ if(!CFile.getline(inBuffer,BUFFER_SIZE)) ++ break; + } + + return 0; +diff -r bcb9acfa66de -r effd078610a7 src/gui/mainFrame.cpp +--- src/gui/mainFrame.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/gui/mainFrame.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -1391,7 +1391,7 @@ + updateWxTreeCtrl(treeFilters); + + if(!noUpdate) +- return doSceneUpdate(true); ++ doSceneUpdate(true); + + return true; + } +@@ -3834,7 +3834,7 @@ + + } + +-bool MainWindowFrame::doSceneUpdate(bool ensureVisible) ++void MainWindowFrame::doSceneUpdate(bool ensureVisible) + { + //Update scene + ASSERT(!currentlyUpdatingScene); +@@ -3864,6 +3864,11 @@ + ensureResultVisible=ensureVisible; + + ASSERT(!refreshControl); ++ ++ //Hack to prevent crash on double-refresh ++ if(refreshControl) ++ return; ++ + refreshControl = new RefreshController(visControl.state.treeState); + refreshThread=new RefreshThread(this,refreshControl); + progressTimer->Start(PROGRESS_TIMER_DELAY); +@@ -3871,7 +3876,8 @@ + refreshThread->Create(); + refreshThread->Run(); + +- return true; ++ cerr << "Updating scene complete"<< endl; ++ return; + } + + void MainWindowFrame::updateWxTreeCtrl( wxTreeCtrl *t, const Filter *f) +@@ -3971,6 +3977,11 @@ + ASSERT(!visControl.state.treeState.isRefreshing()); + progressTimer->Stop(); + ++ //Hack to prevent crash on re-entry during refresh. Should never trigger. ++ if(!refreshControl) ++ return; ++ ++ + vector > consoleMessages; + consoleMessages=refreshControl->getConsoleMessages(); + +diff -r bcb9acfa66de -r effd078610a7 src/gui/mainFrame.h +--- src/gui/mainFrame.h Tue May 31 13:04:58 2016 +1000 ++++ src/gui/mainFrame.h Tue Jun 21 12:45:20 2016 +0100 +@@ -124,7 +124,7 @@ + //!Update the progress information in the status bar + void updateProgressStatus(); + //!Perform an update to the 3D Scene. Returns false if refresh failed +- bool doSceneUpdate(bool ensureResultVisible=false); ++ void doSceneUpdate(bool ensureResultVisible=false); + + //!Complete the scene update. Returns false if failed + void finishSceneUpdate(unsigned int errCode); +diff -r bcb9acfa66de -r effd078610a7 src/gui/mathglPane.cpp +--- src/gui/mathglPane.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/gui/mathglPane.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -627,7 +627,7 @@ + thePlot->getRegion(plotId,regionId,r); + + //TODO: Implement a more generic region handler? +- ASSERT(thePlot->plotType(plotId) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(plotId) == PLOT_MODE_1D); + + float mglStartX,mglStartY; + toPlotCoords(draggingStart.x, draggingStart.y,mglStartX,mglStartY); +@@ -1471,7 +1471,7 @@ + return; + + +- ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); + + //See where extending the region is allowed up to. + thePlot->findRegionLimit(startMousePlot,startMouseRegion, +@@ -1550,7 +1550,7 @@ + { + //This needs to be extended to support more + //plot types. +- ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); ++ ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); + + //Draw "ghost" limits markers for move, + //these appear as moving vertical bars to outline +diff -r bcb9acfa66de -r effd078610a7 src/wx/wxcomponents.cpp +--- src/wx/wxcomponents.cpp Tue May 31 13:04:58 2016 +1000 ++++ src/wx/wxcomponents.cpp Tue Jun 21 12:45:20 2016 +0100 +@@ -188,14 +188,14 @@ + + void CopyGrid::saveData() + { +- wxFileDialog *wxF = new wxFileDialog(this,TRANS("Save Data..."), wxT(""), ++ wxFileDialog wxF(this,TRANS("Save Data..."), wxT(""), + wxT(""),TRANS("Text File (*.txt)|*.txt|All Files (*)|*"),wxFD_SAVE); + +- if( (wxF->ShowModal() == wxID_CANCEL)) ++ if( (wxF.ShowModal() == wxID_CANCEL)) + return; + + +- std::string dataFile = stlStr(wxF->GetPath()); ++ std::string dataFile = stlStr(wxF.GetPath()); + ofstream f(dataFile.c_str()); + + if(!f) diff -Nru 3depict-0.0.19-1/packaging/RPM/3Depict.spec 3depict-0.0.20/packaging/RPM/3Depict.spec --- 3depict-0.0.19-1/packaging/RPM/3Depict.spec 2016-05-31 02:55:40.000000000 +0000 +++ 3depict-0.0.20/packaging/RPM/3Depict.spec 2017-01-14 20:51:19.000000000 +0000 @@ -1,6 +1,6 @@ Name: 3Depict Version: 0.0.19 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Valued 3D point cloud visualization and analysis Group: Applications/Engineering @@ -37,7 +37,8 @@ Patch0: %{name}-%{version}-manual-pdf-loc.patch #Fedora specific font dir Patch1: %{name}-%{version}-font-path.patch - +#Upstream post-release patches from hg repo +Patch2: %{name}-%{version}-upstream-effd078610a7.patch %description This software is designed to help users visualize and analyze 3D point clouds @@ -51,6 +52,7 @@ %patch0 %patch1 +%patch2 %if 0%{?fedora} > 24 # Installation directory has changed @@ -118,9 +120,13 @@ %changelog +* Sat Jan 14 2017 D Haley - 0.0.19-2 +- Rebuild for libmgl bump + * Wed Jun 01 2016 D Haley - 0.0.19-1 - Update to 0.0.19 - Remove gcc patch, fixed upstream +- Add upstream patch * Fri Apr 29 2016 Ralf Corsépius - 0.0.18-7 - Rebuild for qhull-2015.2-1. diff -Nru 3depict-0.0.19-1/src/3Depict.cpp 3depict-0.0.20/src/3Depict.cpp --- 3depict-0.0.19-1/src/3Depict.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/3Depict.cpp 2017-01-29 15:47:06.000000000 +0000 @@ -248,7 +248,7 @@ { wxCommandEvent cmd; MainFrame->OnProgressAbort( cmd); - return true; + return wxEventFilter::Event_Processed ; } #ifdef __APPLE__ else if(MainFrame->IsFullScreen()) @@ -256,7 +256,7 @@ wxCommandEvent cmd; MainFrame->OnViewFullscreen(cmd); MainFrame->ShowFullScreen(false); - return true; + return wxEventFilter::Event_Processed ; } #endif @@ -288,7 +288,9 @@ } - return -1; + + //Process event as normal + return wxEventFilter::Event_Skip; } //Command line help table and setup diff -Nru 3depict-0.0.19-1/src/backend/APT/3DapReader.cpp 3depict-0.0.20/src/backend/APT/3DapReader.cpp --- 3depict-0.0.19-1/src/backend/APT/3DapReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/src/backend/APT/3DapReader.cpp 2017-01-14 09:49:17.000000000 +0000 @@ -0,0 +1,656 @@ +/* + * 3DapReader.cpp - File parser for 3DAP systems + * Copyright (C) 2015 D Haley + * + * 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 3 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, see . + */ + + +#include "3DapReader.h" +#include +#include +#include +#include + +#include +#include +#include + + + +#include "common/basics.h" + +using std::vector; +using std::endl; +using std::string; + + +//TODO: We may have to deal with 2 or 3 delay line configurations +//3Dap uses hexanode detector?? +const unsigned int NUM_XY=2; + + +//Charge on an electron (coulombs -- aka A.s) +const float CHARGE_ELECTRON= 1.602176e-19; +//Atomic mass units per kilo +const float AMU_PER_KG = 6.0221409e26; + +const char *OPS_ENUM_ERRSTRINGS[] = +{ + "\"C\" line (exp. parameters) not in expected format", + "\"I\" line (Detector parameters) not in expected format", + "\"-\" line (Time-of-flights) not in expected format", + "\"V\" line (voltage data) not in expected format", + "Error interpreting \"V\" line (voltage data) data", + "Missing beta value from \"V\" line - needs to be in voltage, or in system header (\"C\" line", + "Incorrect number of \"V\" line (voltage data) data entries", + "Unknown linetype in data file", + "\"P\" line (detector channels) not in expected format", + "Unable to interpret channels line", + "Incorrect number of events in \"S\" (hit position) line", + "Unable to interpret event data on \"S\" (hit position) line", + "Unable to parse \"S\" (hit position) line event count (eg 8 in S8 ...)", + "\"S\" (hit position) line data not preceded by TOF data, as it should have been", + "Duplicate system data/experiment setup (\"C\") entry found -- there can only be one", + "Duplicate detector (\"I\") data entry found -- there can only be one", + "Trailing \"-\" line found -- should have be followed by a \"S\" line, but wasn't.", + "Duplicate\"-\" line found -- should have be followed by a \"S\" line, but wasn't.", + "Unable to open file", + "unable to read file, after opening", + "Abort requested" +}; +//Single 3DAP hit event +struct SINGLE_HIT +{ + float x,y; + float tof; + float massToCharge; +}; + +//Voltage data structure -- these updates occur during the experiment +struct VOLTAGE_DATA +{ + size_t nextHitGroupOffset; + float voltage; + float pulseVolt; + float beta; //For some reason, OPS files seem to have duplicate beta data +}; + +//experimental setup data +struct THREEDAP_DATA +{ + float flightPath; //in mm + float alpha; //Pulse coupling coefficient + float beta; + float tZero; // in ns + float detectorRadius;// in mm + unsigned int detectorChannels; +}; + +//Hits obtained on same pulse +struct THREEDAP_EXPERIMENT +{ + THREEDAP_DATA params; + vector > eventData; + vector voltageData; + vector eventPulseNumber; +}; + +float evaluate_polyBase(float x, float y, + unsigned int baseNum, unsigned int order); + +//Polynomial fit via GSL +unsigned int polyFitData(const vector &obsX, const vector &obsY, + const vector &obsZ, vector &coeff, unsigned int polyOrder); + +//Function to read POSAP "OPS" files, which contain data +//on voltage, positioned hits and time of flights +//as well as some instrument parameters +unsigned int readOps(const char *file, + THREEDAP_EXPERIMENT &data, + unsigned int &badLine, unsigned int &progress, + ATOMIC_BOOL &wantAbort, bool strictMode=false) +{ + + COMPILE_ASSERT(THREEDEP_ARRAYSIZE(OPS_ENUM_ERRSTRINGS) == OPSREADER_ENUM_END); + + const char COMMENT_MARKER='*'; + + badLine=0; + + size_t totalFilesize; + if(!getFilesize(file,totalFilesize)) + return OPSREADER_OPEN_ERR; + + std::ifstream f(file); + + if(!f) + return OPSREADER_OPEN_ERR; + + + enum + { + OPS_LINE_DASH, + OPS_LINE_OTHER_OR_NONE + }; + + bool haveSystemParams=false; + bool haveDetectorSize=false; + + unsigned int lastLine=OPS_LINE_OTHER_OR_NONE; + + vector strVec; + while(!f.eof()) + { + std::string strLine; + getline(f,strLine); + badLine++; + + + if(f.eof()) + break; + + if(!f.good()) + return OPSREADER_READ_ERR; + + //If user wants to abort, please do so + if(wantAbort) + return OPSREADER_ABORT_ERR; + + //Remove any ws delimiters + stripWhite(strLine); + + //Is a blank or comment? Don't process line + if(!strLine.size() || strLine[0] == COMMENT_MARKER) + continue; + + //Check to see what type of line this is + strVec.clear(); + + splitStrsRef(strLine.c_str(),"\t ",strVec); + switch(strLine[0]) + { + //"C" line contains the system parameters + // flight path, pulse coupling coefficients (alpha, beta -- see Sebastien et al) and time zero offset. + // "New method for the calibration of three-dimensional atom-probe mass" + // Review of Scientific Instruments, 2001 + case 'C': + { + if(haveSystemParams) + return OPSREADER_FORMAT_DUPLICATE_SYSDATA; + + haveSystemParams = true; + + //Should have something eg + // C 123 1.01 0.8 -123 + if(strVec.size() != 5) + return OPSREADER_FORMAT_CLINE_ERR; + + if(stream_cast( data.params.flightPath,strVec[1])) + return OPSREADER_FORMAT_CLINE_ERR; + + if(stream_cast( data.params.alpha,strVec[2])) + return OPSREADER_FORMAT_CLINE_ERR; + + if(stream_cast( data.params.beta,strVec[3])) + return OPSREADER_FORMAT_CLINE_ERR; + + if(stream_cast( data.params.tZero,strVec[4])) + return OPSREADER_FORMAT_CLINE_ERR; + + lastLine=OPS_LINE_OTHER_OR_NONE; + break; + } + //"I" Line contains detector radius + case 'I': + { + if(haveDetectorSize) + return OPSREADER_FORMAT_DUPLICATE_DETECTORSIZE; + + haveDetectorSize=true; + + //Should have I or IR + //I - No reflectron + //IR - reflectron + //and a floating pt number + if(strVec.size() != 2) + return OPSREADER_FORMAT_DETECTORLINE_ERR; + + if(stream_cast(data.params.detectorRadius,strVec[1])) + return OPSREADER_FORMAT_DETECTORLINE_ERR; + lastLine=OPS_LINE_OTHER_OR_NONE; + + break; + } + //"S" line contains the hit TOFs, and hit frequency + case 'S': + { + //OK, so this is the actual data -- each "S"" line should be + //preceded by a "-" line. + if(lastLine !=OPS_LINE_DASH) + { + if(strictMode) + return OPSREADER_FORMAT_SLINE_PREFIX_ERR; + else + { + //FIXME: better warning mechanism + //cerr << "WARNING : S line not preceded by \"-\" line; skipping" << endl; + continue; //oK, this is kinda a confusing situation, lets just get to the next line, which we hope is an S. + } + } + + + + //If we have less positions than TOFs, then something is wrong + //-- we have to discard the previous "-" line + // could have a wierd line that makes no sense (for eg, I found this): + // + //-151 13 + //S0 + // I assume that this means that + if((strVec.size()-1) /(NUM_XY+1)< data.eventData.back().size()) + { + ASSERT(data.eventData.size()) + //We have to discard the previous hit sequence + data.eventData.pop_back(); + lastLine=OPS_LINE_OTHER_OR_NONE; + break; + } + + + //OK, so the event numbers are coded like + //"S8", where S indicates it is an event + //line, and the next numbers indicate the + //number of observed events + strVec[0]= strVec[0].substr(1); + + unsigned int numEvents; + if(stream_cast(numEvents,strVec[0])) + { + if(strictMode) + return OPSREADER_FORMAT_SLINE_FORMAT_ERR; + else + { + //FIXME : better warn mechanism + //cerr << "Warning : skipping S-line at file line:" << badLine << " unable to interpret event count" << endl; + data.eventData.pop_back(); + lastLine=OPS_LINE_OTHER_OR_NONE; + break; + } + } + + + if(numEvents != (strVec.size()-1)/(NUM_XY+1)) + return OPSREADER_FORMAT_SLINE_EVENTCOUNT_ERR; + + + vector &curHits=data.eventData.back(); + + //The TOF must be preset by a "-" line, as checked above. + //The contents of this "S" line must have at least enough elements + //to cover the TOFs. The other hits are assigned a zero TOF + if(curHits.size()> numEvents) + { + if(strictMode) + return OPSREADER_FORMAT_SLINE_EVENTCOUNT_ERR; + else + { + //FIXME: Better warning mechanism + //cerr << "Warning : skipping S-line at file line:" << badLine << " unable to interpret event count" << endl; + data.eventData.pop_back(); + lastLine=OPS_LINE_OTHER_OR_NONE; + break; + } + } + + + SINGLE_HIT h; + h.tof=0; + curHits.resize(numEvents,h); + vector tofs; + + //Retrieve the TOF values, so we can redirect them + //as the TOF values above's correspondence map + //is stored at the end of the hit sequence, one + //entry per hit + //zero means untimed, otherwise TOF + tofs.resize(curHits.size()); + for(unsigned int ui=0;ui timeMap; + //Read the TOF timing map + for(unsigned int ui=timingIndex; ui tofs; + for(unsigned int ui=1; ui< strVec.size(); ui++) + { + float timeOfFlight; + if(stream_cast(timeOfFlight,strVec[ui])) + return OPSREADER_FORMAT_LINE_DASH_ERR; + + tofs.push_back(timeOfFlight); + } + + vector s; + + s.resize(tofs.size()); + for(unsigned int ui=0;ui curMTocs; + + curMTocs.clear(); + //Ensure that we are pointing to the *previous* voltage + // that we have seen + if (!v || (vNext && ui >=vNext->nextHitGroupOffset+1)) + { + ASSERT(voltageOffset <=experiment.voltageData.size()); + v=&(experiment.voltageData[voltageOffset]); + if(voltageOffset ::epsilon()) + continue; + + //effective voltage + float rat; + //Inverse Velocity + rat=(experiment.eventData[ui][uj].tof - experiment.params.tZero)/(experiment.params.flightPath); + + //Corrected voltage (kV) + //FIXME: Where are these magic numbers coming from? + float tmpVoltage; + tmpVoltage=0.983*(v->voltage+105); + float tmpPulse; + + tmpPulse=1.07*(v->pulseVolt-85); + tmpVoltage=(tmpVoltage+tmpPulse*v->beta)*experiment.params.alpha/1.0e3; + + //Compute m/c information + experiment.eventData[ui][uj].massToCharge=0.1929796*tmpVoltage*rat*rat; + } + + } +} + +//Reconstruct onto an imaginary cylinder +// - this may not be ideal as 3dap systems use unmasked, square detectors. +void cylinderReconstruct(const THREEDAP_EXPERIMENT &experiment, + float ionVolume, float scaleRadius, + std::vector &ions) +{ + + //Detector radius in + const float dz = ionVolume/(scaleRadius*scaleRadius); + + ASSERT(ions.empty()); + + float zOff=0; + ions.reserve(experiment.eventData.size()); + for(unsigned int ui=0;ui &ionData) +{ + unsigned int errCode; + unsigned int badLine; + THREEDAP_EXPERIMENT experimentData; + errCode=readOps(file,experimentData,badLine,progress,wantAbort); + if(errCode) + return errCode; + + computeMToC(experimentData); + + //TODO: Would be sensible to range the data first, then + // perform reconstruction later. This however requires a more + // complex UI + //RangeData(...) + + cylinderReconstruct(experimentData,params.ionVolume/params.detectionEfficiency,params.radiusCylinder, ionData); + + + return 0; +} + diff -Nru 3depict-0.0.19-1/src/backend/APT/3DapReader.h 3depict-0.0.20/src/backend/APT/3DapReader.h --- 3depict-0.0.19-1/src/backend/APT/3DapReader.h 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/src/backend/APT/3DapReader.h 2017-01-14 09:49:17.000000000 +0000 @@ -0,0 +1,59 @@ +#ifndef THREEDAPREADER_H +#define THREEDAPREADER_H + +#include + +#include "ionhit.h" +#include "common/stringFuncs.h" + +enum +{ + OPSREADER_FORMAT_CLINE_ERR, + OPSREADER_FORMAT_DETECTORLINE_ERR, + OPSREADER_FORMAT_LINE_DASH_ERR, + OPSREADER_FORMAT_LINE_VOLTAGE_ERR, + OPSREADER_FORMAT_LINE_VOLTAGE_NOBETA, + OPSREADER_FORMAT_LINE_VOLTAGE_DATA_ERR, + OPSREADER_FORMAT_LINE_VOLTAGE_DATACOUNT_ERR, + OPSREADER_FORMAT_LINETYPE_ERR, + OPSREADER_FORMAT_CHANNELS_ERR, + OPSREADER_CHANNELS_DATA_ERR, + OPSREADER_FORMAT_SLINE_EVENTCOUNT_ERR, + OPSREADER_FORMAT_SLINE_EVENTDATA_ERR, + OPSREADER_FORMAT_SLINE_FORMAT_ERR, + OPSREADER_FORMAT_SLINE_PREFIX_ERR, + OPSREADER_FORMAT_DUPLICATE_SYSDATA, + OPSREADER_FORMAT_DUPLICATE_DETECTORSIZE, + OPSREADER_FORMAT_TRAILING_DASH_ERR, + OPSREADER_FORMAT_DOUBLEDASH, + OPSREADER_OPEN_ERR, + OPSREADER_READ_ERR, + OPSREADER_ABORT_ERR, + OPSREADER_ENUM_END +}; + +extern const char *OPS_ENUM_ERRSTRINGS[]; + +struct THREEDAP_RECON_PARAMS +{ + //Do we want to use TOF correction? + bool useTOFDistortion; + // Minimum and maximum m/c values to use + // when performing TOF correction + float minMtoCDistort, maxMtoCDistort; + //radius of cylinder to use for reconstruction + float radiusCylinder; + + //Detection efficiency + float detectionEfficiency; + //volume of ion to use + float ionVolume; +}; + +//!Reconstruct an "OPS" formatted file (from a 3Dap) to an IonHit vector +unsigned int reconstruct3DapData(const char *file, + const THREEDAP_RECON_PARAMS ¶ms, + unsigned int &progress, ATOMIC_BOOL &wantAbort, + std::vector &ionData); + +#endif diff -Nru 3depict-0.0.19-1/src/backend/APT/APTFileIO.cpp 3depict-0.0.20/src/backend/APT/APTFileIO.cpp --- 3depict-0.0.19-1/src/backend/APT/APTFileIO.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/APT/APTFileIO.cpp 2017-01-14 09:49:17.000000000 +0000 @@ -1,5 +1,5 @@ /* - * APTClasses.h - Generic APT components code + * APTFileIO.cpp - Generic APT components code * Copyright (C) 2015 D Haley * * This program is free software: you can redistribute it and/or modify @@ -109,11 +109,28 @@ }; //--------- +//TAPSIM binary errors and associated error strings +enum +{ + TAPSIM_ERR_FILE_FORMAT_FAIL, + TAPSIM_ERR_FILE_OPEN_FAIL, + TAPSIM_ERR_ABORTED +}; + + +const char *TAPSIM_ERR_STRINGS[] = {"", + NTRANS("Error interpreting file contents"), + NTRANS("Error opening file"), + NTRANS("Aborted opening file"), + }; + +//This is a performance tunable option. Some systems seek slowly +#define USE_SEEKING_LIMITLOAD +#if defined(USE_SEEKING_LIMITLOAD) unsigned int LimitLoadPosFile(unsigned int inputnumcols, unsigned int outputnumcols, const unsigned int index[], vector &posIons,const char *posFile, size_t limitCount, unsigned int &progress, ATOMIC_BOOL &wantAbort,bool strongSampling) { - //Function is only defined for 4 columns here. ASSERT(outputnumcols == 4); //buffersize must be a power of two and at least outputnumcols*sizeof(float) @@ -274,6 +291,165 @@ delete[] buffer2; return 0; } +#else +unsigned int LimitLoadPosFile(unsigned int inputnumcols, unsigned int outputnumcols, const unsigned int index[], vector &posIons,const char *posFile, size_t limitCount, + unsigned int &progress, ATOMIC_BOOL &wantAbort,bool strongSampling) +{ + //Function is only defined for 4 columns here. + ASSERT(outputnumcols == 4); + //buffersize must be a power of two and at least outputnumcols*sizeof(float) + const unsigned int BUFFERSIZE=inputnumcols * sizeof(float); + const unsigned int BUFFERSIZE2=outputnumcols * sizeof(float); + + + //Obtain size of file + size_t fileSize; + if(!getFilesize(posFile,fileSize)) + return POS_OPEN_FAIL; + + if(!fileSize) + return POS_EMPTY_FAIL; + + //calculate the number of points stored in the POS file + size_t pointCount=0; + size_t maxIons; + size_t maxCols = inputnumcols * sizeof(float); + //regular case + if(fileSize % maxCols) + return POS_SIZE_MODULUS_ERR; + maxIons =fileSize/maxCols; + limitCount=std::min(limitCount,maxIons); + + //If we are going to load the whole file, don't use a sampling method to do it. + if(limitCount == maxIons) + return GenericLoadFloatFile(inputnumcols, outputnumcols, index, posIons,posFile,progress, wantAbort); + + //open pos file + std::ifstream CFile(posFile,std::ios::binary); + if(!CFile) + return POS_OPEN_FAIL; + + //Allocate buffers + //-- + char *buffer,*buffer2; + try + { + buffer=new char[BUFFERSIZE]; + } + catch(std::bad_alloc &m) + { + return POS_ALLOC_FAIL; + } + + try + { + buffer2=new char[BUFFERSIZE2]; + } + catch(std::bad_alloc &m) + { + delete[] buffer; + return POS_ALLOC_FAIL; + } + //-- + + + //Use a sampling method to load the pos file + std::vector ionsToLoad; + try + { + posIons.resize(limitCount); + + RandNumGen rng; + rng.initTimer(); + unsigned int dummy; + randomDigitSelection(ionsToLoad,maxIons,rng, + limitCount,dummy,strongSampling); + } + catch(std::bad_alloc) + { + delete[] buffer; + delete[] buffer2; + return POS_ALLOC_FAIL; + } + + //sort again + //NOTE: I tried to use a functor here to get progress + // It was not stable with parallel sort. + // Can we use several partial_sorts to get progress? + std::sort(ionsToLoad.begin(),ionsToLoad.end()); + unsigned int curProg = PROGRESS_REDUCE; + + size_t curPos=0, curIon=0; + while( (CFile.tellg() < fileSize) && curIon < ionsToLoad.size()) + { + //Read in a single input entry + + if(!CFile.good()) + { + delete[] buffer; + delete[] buffer2; + return POS_READ_FAIL; + } + CFile.read(buffer,BUFFERSIZE); + + if(curPos != ionsToLoad[curIon]) + { + curPos++; + continue; + } + curPos++; + + + for (size_t i = 0; i < outputnumcols; i++) // iterate through floats + memcpy(&(buffer2[i * sizeof(float)]), &(buffer[index[i] * sizeof(float)]), sizeof(float)); + + posIons[curIon].setHit((float*)buffer2); + //Data bytes stored in pos files are big + //endian. flip as required + #ifdef __LITTLE_ENDIAN__ + posIons[curIon].switchEndian(); + #endif + + if(posIons[curIon].hasNaN()) + { + delete[] buffer; + delete[] buffer2; + return POS_NAN_LOAD_ERROR; + } + + if(posIons[curIon].hasInf()) + { + delete[] buffer; + delete[] buffer2; + return POS_INF_LOAD_ERROR; + } + + pointCount++; + if(!curProg--) + { + + progress= (unsigned int)((float)(CFile.tellg())/((float)fileSize)*100.0f); + curProg=PROGRESS_REDUCE; + if(wantAbort) + { + delete[] buffer; + delete[] buffer2; + posIons.clear(); + return POS_ABORT_FAIL; + + } + } + + curIon++; + } + + + delete[] buffer; + delete[] buffer2; + return 0; +} +#endif + unsigned int GenericLoadFloatFile(unsigned int inputnumcols, unsigned int outputnumcols, const unsigned int index[], vector &posIons,const char *posFile, @@ -692,8 +868,6 @@ unsigned int LoadATOFile(const char *fileName, vector &ions, unsigned int &progress, ATOMIC_BOOL &wantAbort,unsigned int forceEndian) { - - //open pos file std::ifstream CFile(fileName,std::ios::binary); @@ -922,6 +1096,11 @@ ions[curPos] = IonHit(buffer); curPos++; + + //Update progress every ~1k ions. + // this is deliberately a power of two to speed + // the modulus operator (not benchmarked) + progress = (unsigned int)(float)CFile.tellg()/(float)fileSize*100.0f; } } @@ -933,6 +1112,8 @@ CFile.read((char*)buffer,LAWATAP_ATO_RECORD_SIZE); ions[curPos] = IonHit(buffer); curPos++; + + progress = (unsigned int)(float)CFile.tellg()/(float)fileSize*100.0f; } } @@ -942,6 +1123,136 @@ return 0; } +//Load a TAPSIM Binfile +unsigned int loadTapsimBinFile(const char *fileName, unsigned int &progress, ATOMIC_BOOL &wantAbort, vector &posIons) +{ + ifstream f(fileName,std::ios::binary); + + if(!f) + return TAPSIM_ERR_FILE_OPEN_FAIL; + + f.seekg(0,std::ios::end); + size_t fileSize; + fileSize = f.tellg(); + f.seekg(0,std::ios::beg); + + //TAPSIM's binary geometery input format is not totally clearly documented + // but an example is provided. So best efforts are us. + + std::string str; + getline(f,str); + + vector s; + splitStrsRef(str.c_str(),' ',s); + + const unsigned int HEADER_ENTRIES=4; + if(s.size() != HEADER_ENTRIES) + return TAPSIM_ERR_FILE_FORMAT_FAIL; + + bool binaryMode; + + + if(s[0] == "BINARY") + { + //Payload is in binary format + binaryMode=true; + } + else if(s[0] == "ASCII") + { + //payload is in ascii format + binaryMode=false; + } + else + return TAPSIM_ERR_FILE_FORMAT_FAIL; + + //maximum size of a TAPSIM record, in bytes + unsigned int MAX_RECORD_SIZE=18; + char *buffer=new char[MAX_RECORD_SIZE]; + if(binaryMode) + { + size_t numEntries; + if(stream_cast(numEntries,s[1])) + { + delete[] buffer; + return TAPSIM_ERR_FILE_FORMAT_FAIL; + } + + //ID specifies atom type + bool idsPresent; + //There is an inconsistency between the example files given and the documentation + // The documentation says the ids are optional. The examples have the option disabled, + // but provide the IDs anyway - this changes the payload size. + if(s[2] == "1" || s[2] == "0" ) + idsPresent=true; + else + { + delete[] buffer; + return TAPSIM_ERR_FILE_FORMAT_FAIL; + } + + + size_t numbersPresent; + if(s[3] == "1" ) + numbersPresent=true; + else if (s[3] == "0") + numbersPresent=false; + else + { + delete[] buffer; + return TAPSIM_ERR_FILE_FORMAT_FAIL; + } + + //Contrary to docuemntation, ids appear to be "short", not "unsigned int" + size_t recordSize=( (numbersPresent ? 1:0 )*sizeof(unsigned int) + + 3*sizeof(float) + (idsPresent ?1:0)*sizeof(short)); + + //Check that payload size matches expected size + if(fileSize -f.tellg() !=recordSize*numEntries) + { + delete[] buffer; + return TAPSIM_ERR_FILE_FORMAT_FAIL; + } + + IonHit h; + posIons.resize(numEntries); + for(size_t ui=0;ui > &data,const char *posFile, const char *deliminator, const size_t limitCount, unsigned int &progress, ATOMIC_BOOL &wantAbort,bool strongRandom); +//Load a TAPSIM Binfile +unsigned int loadTapsimBinFile(const char *filename, unsigned int &progress, ATOMIC_BOOL &wantAbort, vector &posions); //Load a CAMECA LAWATAP "ATO" formatted file. // - This is a totally different format to the "FlexTAP" ato format diff -Nru 3depict-0.0.19-1/src/backend/APT/APTRanges.cpp 3depict-0.0.20/src/backend/APT/APTRanges.cpp --- 3depict-0.0.19-1/src/backend/APT/APTRanges.cpp 2016-05-23 15:57:53.000000000 +0000 +++ 3depict-0.0.20/src/backend/APT/APTRanges.cpp 2017-01-21 12:11:22.000000000 +0000 @@ -117,7 +117,7 @@ //true - was last, or now am on ion name //false - am still on multiplier - int nameMode=true; + bool nameMode=true; for(size_t ui=1;ui &ions) +void RangeFile::range(vector &ions) const { vector rangedVec; unsigned int numIons=ions.size(); - rangedVec.reserve(numIons); + rangedVec.reserve(numIons/2); for(unsigned int ui=0; ui &inIons, vector &ions) const +{ + unsigned int numIons=inIons.size(); + ions.clear(); + ions.reserve(numIons/2); + + for(unsigned int ui=0; ui &ions, unsigned int rangeID) { vector rangedVec; diff -Nru 3depict-0.0.19-1/src/backend/APT/APTRanges.h 3depict-0.0.20/src/backend/APT/APTRanges.h --- 3depict-0.0.19-1/src/backend/APT/APTRanges.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/APT/APTRanges.h 2016-10-29 20:37:05.000000000 +0000 @@ -195,8 +195,12 @@ bool isRanged(float mass) const; //! Returns true if an ion is ranged bool isRanged(const IonHit &) const; - //!Clips out ions that are not inside the range - void range(std::vector &ionHits); + //!Clips out ions that are not inside any range + // this destroys the input ionHits + void range(std::vector &ionHits) const; + //!Clips out ions that are not inside any range, keeping + void range(const std::vector &ionsIn, + std::vector &ionHits) const; //!Clips out ions that dont match the specified ion name /*! Returns false if the ion name given doesn't match * any in the rangefile (case sensitive) diff -Nru 3depict-0.0.19-1/src/backend/filter.cpp 3depict-0.0.20/src/backend/filter.cpp --- 3depict-0.0.19-1/src/backend/filter.cpp 2016-05-31 01:26:19.000000000 +0000 +++ 3depict-0.0.20/src/backend/filter.cpp 2017-01-14 20:06:18.000000000 +0000 @@ -86,6 +86,12 @@ return nE; } +void Filter::convertFileStringToAbsolute(const string &baseDir, std::string &s) const +{ + //Relative files should be marked with a ./ + if(s.size() > 2 && s.substr(0,2) == "./") + s=baseDir + s.substr(2); +} template<> bool Filter::applyPropertyNow(bool &prop, const std::string &val, bool &needUp) @@ -553,7 +559,7 @@ ASSERT(scatterIntensity.empty()); - ASSERT(plotType < PLOT_TYPE_ENUM_END); + ASSERT(plotStyle < PLOT_TYPE_ENUM_END); } void RangeStreamData::checkSelfConsistent() const { @@ -672,6 +678,10 @@ map, unsigned int> ionColourMap; std::string lastStr; + //Create a default grey colour, if we can't do better + r=g=b=0.5; + a=1.0; + //Sum up the relative frequencies for(unsigned int ui=0; uidata[ui]; - if(Filter::wantAbort) + if(*Filter::wantAbort) return FILTER_ERR_ABORT; offset+=d->data.size(); @@ -982,6 +992,44 @@ return 0; } + +unsigned int Filter::collateIons(const vector &dataIn, + std::vector &p, ProgressData &prog, size_t totalDataSize) +{ + //Build monolithic point set + //--- + p.resize(totalDataSize); + + size_t dataSize=0; + + prog.filterProgress=0; + if(*Filter::wantAbort) + return FILTER_ERR_ABORT; + + for(unsigned int ui=0;uigetStreamType()) + { + case STREAM_TYPE_IONS: + { + const IonStreamData *d; + d=((const IonStreamData *)dataIn[ui]); + + if(extendDataVector(p,d->data, prog.filterProgress, + dataSize)) + return FILTER_ERR_ABORT; + + dataSize+=d->data.size(); + } + break; + default: + break; + } + } + //--- + + return 0; +} void Filter::updateOutputInfo(const std::vector &dataOut) diff -Nru 3depict-0.0.19-1/src/backend/filter.h 3depict-0.0.20/src/backend/filter.h --- 3depict-0.0.19-1/src/backend/filter.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filter.h 2017-01-14 09:49:17.000000000 +0000 @@ -114,9 +114,6 @@ BINDING_RECT_CORNER_MOVE }; -extern const char *STREAM_NAMES[]; - - //Representations enum { @@ -124,9 +121,14 @@ VOXEL_REPRESENT_POINTCLOUD, VOXEL_REPRESENT_ISOSURF, VOXEL_REPRESENT_AXIAL_SLICE, + VOXEL_REPRESENT_SLICE, VOXEL_REPRESENT_END }; +extern const char *STREAM_NAMES[]; + + + //Error codes for each of the filters. //These can be passed to the getErrString() function for //a human readable error message @@ -149,6 +151,18 @@ //--- // +inline +void assignIonData(Point3D &p, const IonHit &h) +{ + p = h.getPosRef(); +} + +inline +void assignIonData(IonHit &p, const IonHit &h) +{ + p = h; +} + //!Return the number of elements in a vector of filter data - i.e. the sum of the number of objects within each stream. Only masked streams (STREAM_TYPE_*) will be counted size_t numElements(const std::vector &vm, unsigned int mask=STREAMTYPE_MASK_ALL); @@ -181,6 +195,7 @@ //Cross-checks fields to determine if (best guess) ///data structure has a sane combination of values virtual void checkSelfConsistent() const {} + virtual const string getName() const =0; #endif }; @@ -294,6 +309,10 @@ //!Use heuristics to guess best display parameters for this ionstream. May attempt to leave them alone void estimateIonParameters(const std::vector &inputData); void estimateIonParameters(const IonStreamData *inputFilter); + +#ifdef DEBUG + const string getName() const { return "Ion Stream";}; +#endif }; //!Point with m-t-c value data @@ -313,6 +332,9 @@ //!Apply filter to input data stream Voxels *data; +#ifdef DEBUG + const string getName() const { return "Voxel Stream";}; +#endif }; //!Plotting data @@ -375,6 +397,7 @@ //Cross-checks fields to determine if (best guess) ///data structure has a sane combination of values virtual void checkSelfConsistent() const; + const string getName() const { return "Plot Stream";}; #endif }; @@ -395,7 +418,7 @@ //Label for X, Y axes std::string xLabel,yLabel; - unsigned int plotType; + unsigned int plotStyle; //!Structured XY data pairs for plotting curve Array2D xyData; @@ -418,6 +441,7 @@ #ifdef DEBUG void checkSelfConsistent() const; + const string getName() const { return "2DPlot Stream";}; #endif }; @@ -429,7 +453,7 @@ std::vector drawables; //!constructor DrawStreamData(){ streamType=STREAM_TYPE_DRAW;}; - DrawStreamData(const Filter *f){ streamType=STREAM_TYPE_DRAW;}; + DrawStreamData(const Filter *f){ streamType=STREAM_TYPE_DRAW; parent=f;}; //!Destructor ~DrawStreamData(); //!Returns 0, as this does not store basic object types -- i.e. is not for data storage per se. @@ -441,6 +465,7 @@ //Cross-checks fields to determine if (best guess) ///data structure has a sane combination of values void checkSelfConsistent() const; + const string getName() const { return "Draw Stream";}; #endif }; @@ -472,6 +497,7 @@ #ifdef DEBUG void checkSelfConsistent() const ; + const string getName() const { return "Range Stream" ;}; #endif }; @@ -479,8 +505,9 @@ class Filter { protected: - + //Should we cache, and is the cache content up-to-date bool cache, cacheOK; + //Should we use slower, but better randomisation algorithms static bool strongRandom; @@ -502,9 +529,15 @@ + //Convert an internal file string (/ separated) representing a path, to absolute as required. Relative paths should be indicated with a "./" + void convertFileStringToAbsolute(const string &basePath, std::string &s) const; + //Collate ions from filterstream data into an ionhit vector static unsigned int collateIons(const std::vector &dataIn, std::vector &outVector, ProgressData &prog, size_t totalDataSize=(size_t)-1); + + static unsigned int collateIons(const std::vector &dataIn, + std::vector &outVector, ProgressData &prog, size_t totalDataSize=(size_t)-1); //!Propagate the given input data to an output vector static void propagateStreams(const std::vector &dataIn, @@ -531,6 +564,241 @@ //!Get the per-filter error codes virtual std::string getSpecificErrString(unsigned int errCode) const=0; + //!Extend a point data vector using some ion data. + // Offset is the position to start inserting in the destination array. + // Will fail if user abort is detected + template + static unsigned int extendDataVector(std::vector &dest, const std::vector &vIonData, + unsigned int &progress, size_t offset) + { + unsigned int curProg=NUM_CALLBACK; + unsigned int n =offset; +#ifdef _OPENMP + //Parallel version + bool spin=false; + #pragma omp parallel for shared(spin) + for(size_t ui=0;ui + static size_t buildSplitPoints(const vector &dataIn, + ProgressData &progress, size_t totalDataSize, + const RangeFile *rngF, const vector &pSourceEnabled, const vector &pTargetEnabled, + vector &pSource, vector &pTarget + ) + { + ASSERT(rngF); + ASSERT(pSourceEnabled.size() == pTargetEnabled.size()); + ASSERT(pSourceEnabled.size() == rngF->getNumIons()); + size_t sizeNeeded[2]; + sizeNeeded[0]=sizeNeeded[1]=0; + + //Presize arrays + for(unsigned int ui=0; uigetStreamType()) + { + case STREAM_TYPE_IONS: + { + unsigned int ionID; + + const IonStreamData *d; + d=((const IonStreamData *)dataIn[ui]); + ionID=getIonstreamIonID(d,rngF); + + if(ionID == (unsigned int)-1) + { + + //we have ungrouped ions, so work out size individually + for(unsigned int uj=0;ujdata.size();uj++) + { + ionID = rngF->getIonID(d->data[uj].getMassToCharge()); + + if(ionID == (unsigned int)-1) + continue; + + if(pSourceEnabled[ionID]) + sizeNeeded[0]++; + if(pTargetEnabled[ionID]) + sizeNeeded[1]++; + } + + break; + } + + if(pSourceEnabled[ionID]) + sizeNeeded[0]+=d->data.size(); + + if(pTargetEnabled[ionID]) + sizeNeeded[1]+=d->data.size(); + + break; + } + default: + break; + } + } + + pSource.resize(sizeNeeded[0]); + pTarget.resize(sizeNeeded[1]); + + //Fill arrays + size_t curPos[2]; + curPos[0]=curPos[1]=0; + + for(unsigned int ui=0; uigetStreamType()) + { + case STREAM_TYPE_IONS: + { + unsigned int ionID; + const IonStreamData *d; + d=((const IonStreamData *)dataIn[ui]); + ionID=getIonstreamIonID(d,rngF); + + if(ionID==(unsigned int)(-1)) + { + //we have ungrouped ions, so work out size individually + for(unsigned int uj=0;ujdata.size();uj++) + { + ionID = rngF->getIonID(d->data[uj].getMassToCharge()); + + if(ionID == (unsigned int)-1) + continue; + + if(pSourceEnabled[ionID]) + { + assignIonData(pSource[curPos[0]],d->data[uj]); + curPos[0]++; + } + + if(pTargetEnabled[ionID]) + { + assignIonData(pTarget[curPos[1]],d->data[uj]); + curPos[1]++; + } + } + + break; + } + + unsigned int dummyProgress=0; + if(pSourceEnabled[ionID]) + { + if(extendDataVector(pSource,d->data, + dummyProgress,curPos[0])) + return FILTER_ERR_ABORT; + + curPos[0]+=d->data.size(); + } + + if(pTargetEnabled[ionID]) + { + if(extendDataVector(pTarget,d->data, + dummyProgress,curPos[1])) + return FILTER_ERR_ABORT; + + curPos[1]+=d->data.size(); + } + + break; + } + default: + break; + } + } + + + return 0; + } + + //TODO: Replace with a non brute-force option + //try to find the ID of a given ionstream by matching to a specific rangefile + static unsigned int getIonstreamIonID(const IonStreamData *d, const RangeFile *r) + { + if(d->data.empty()) + return (unsigned int)-1; + + unsigned int tentativeRange; + + tentativeRange=r->getIonID(d->data[0].getMassToCharge()); + + + //TODO: Currently, we have no choice but to brute force it. + //In the future, it might be worth storing some data inside the IonStreamData itself + //and to use that first, rather than try to brute force the result +#ifdef _OPENMP + bool spin=false; + #pragma omp parallel for shared(spin) + for(size_t ui=1;uidata.size();ui++) + { + if(spin) + continue; + if(r->getIonID(d->data[ui].getMassToCharge()) !=tentativeRange) + spin=true; + } + + //Not a range + if(spin) + return (unsigned int)-1; + +#else + for(size_t ui=1;uidata.size();ui++) + { + if(r->getIonID(d->data[ui].getMassToCharge()) !=tentativeRange) + return (unsigned int)-1; + } +#endif + + return tentativeRange; + } public: Filter() ; @@ -676,7 +944,10 @@ //Can we be a useful filter, even if given no input specified by the Use mask? virtual bool isUsefulAsAppend() const { return false;} - + + //Obtain all of the streams in the input vector that + // have type stream type that matches the typename, T. + // call as a template function ...::getStreamsOfType(...) template static void getStreamsOfType(const std::vector &vec, std::vector &dataOut); diff -Nru 3depict-0.0.19-1/src/backend/filters/algorithms/binomial.cpp 3depict-0.0.20/src/backend/filters/algorithms/binomial.cpp --- 3depict-0.0.19-1/src/backend/filters/algorithms/binomial.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/algorithms/binomial.cpp 2017-01-21 11:37:51.000000000 +0000 @@ -74,23 +74,13 @@ } //Filter ions by ranging - for(size_t ui=0;uigetIonID(ions[ui].getMassToCharge()); - - //Skip unranged ions - if(ionID == (unsigned int)-1) - continue; - - filteredIons.push_back(ions[ui]); - } + rng->range(ions,filteredIons); //Obtain the bounding box for the filtered ions BoundCube totalBound; IonHit::getBoundCube(filteredIons,totalBound); - // Sort the ions according to their Z value + // Sort the ions according to their extrusion-direction value //-- unsigned int extrusionAxis=segmentOptions.extrusionDirection; IonAxisCompare axisCmp(extrusionAxis); @@ -100,10 +90,10 @@ //-- + //out-of-extrusion direction axes unsigned int direction[2]; float binLen[2]; unsigned int nBins[2]; - direction[0]=(extrusionAxis+1)%3; direction[1]=(extrusionAxis+2)%3; @@ -130,7 +120,7 @@ float s; s= totalBound.getSize(direction[ui]); nBins[ui] = s/targetL+1; - binLen[ui] = s/nBins[ui]+1; + binLen[ui] = s/nBins[ui]; } break; @@ -185,23 +175,35 @@ xPos =ionOffset[direction[0]]/binLen[0]; yPos = ionOffset[direction[1]]/binLen[1]; + //numerical issue where ions appear on the side of a + // bin - snap them into this bin + if(xPos == nBins[0]) + xPos--; + if(yPos == nBins[1]) + yPos--; //Find the bin that this new ion is in, // and its range value - unsigned int binIdx,selectionId,range; + unsigned int binIdx,selectionId,ionId; binIdx = rowMajorOffset(xPos,yPos,nBins[1]); - //get range - range=rng->getIonID(filteredIons[ui].getMassToCharge()); - ASSERT(range!=(unsigned int)-1); + //get ion ID + ionId=rng->getIonID(filteredIons[ui].getMassToCharge()); + ASSERT(ionId!=(unsigned int)-1); - //convert range ID to selection ID + //convert ion ID to selection ID //TODO: It might be faster not use the map, but rather // to use a fixed (but oversized) array to do the idx remapping. // the mem cost is pretty negligible for any sensible use case - ASSERT(selectionMapping.find(range) != selectionMapping.end()); - selectionId= selectionMapping.find(range)->second; + if(selectionMapping.find(ionId) == selectionMapping.end()) + { + //Ion was not in inintial selection, may have + // been disabled by upstream range + continue; + } + selectionId= selectionMapping.find(ionId)->second; + ASSERT(binIdx < nGrids); //Increment the nIons for the given bin gridEntries[binIdx].nIons[selectionId]++; gridEntries[binIdx].totalIons++; @@ -222,7 +224,7 @@ // TODO: Should we initialise zStart to this ion, // or should we snap it to the next ion we encounter? gridEntries[binIdx].startPt[extrusionAxis] =filteredIons[ui].getPos()[extrusionAxis]; - gridEntries[binIdx].endPt[extrusionAxis]=filteredIons[ui].getPos()[extrusionAxis]; + gridEntries[binIdx].endPt[extrusionAxis]=filteredIons[ui].getPos()[extrusionAxis]-lowBound[extrusionAxis]; //Set the box x-y (where extrusion=z) coordinates. setGridABCoords(binIdx,direction,nBins, @@ -330,11 +332,11 @@ } - -void computeBinomialStats(const vector &gridEntries, const BINOMIAL_HIST &binHist, +void computeBinomialStats(const vector &gridEntries, BINOMIAL_HIST &binHist, unsigned int nSelected, BINOMIAL_STATS &stats) { stats.nBlocks=gridEntries.size(); + //FIXME: Hack stats.nIons=gridEntries[0].totalIons; //Compute mean @@ -359,6 +361,11 @@ nChiCounted.resize(nSelected,0); stats.chiSquare.resize(nSelected,0); + //make space to store the theoretical frequencies for each + // bin subtype + binHist.theoreticFrequencies.resize(nSelected); + + //Loop over each ion type, and generate the statistics for it CompareMagFloating cmpMag; for(size_t ui=0;uisecond; - //Don't count bins with a low count, as per Moody et al, we set this to 5. - // This can skew the chi-square statistic - if(nTimesObs first) of ion - binThrObs=gsl_ran_binomial_pdf (it->first,p,nTotal)*stats.nBlocks; + binThrObs=gsl_ran_binomial_pdf (it->first,p,stats.nIons)*stats.nBlocks; + binHist.theoreticFrequencies[ui][it->first] = binThrObs; + + //Don't count bins with a low count, as per Moody et al, we set this to 5. + // This can skew the chi-square statistic + if(nTimesObs &mSrc=binHist.theoreticFrequencies[ui]; + map &mDest=binHist.theoreticNormalisedFrequencies[ui]; + double sum; + sum=0; + for(map::const_iterator it=mSrc.begin(); + it!=mSrc.end();++it) + sum+=it->second; + + for(map::const_iterator it=mSrc.begin(); + it!=mSrc.end();++it) + { + mDest[it->first] = it->second/sum; + } + + + + } + } + //-- + + + //Compute the normalised comparison coefficient, "mu" // Moody et al, Microscopy Research and Techniques. 2008 //--- @@ -696,13 +732,13 @@ col.red=1.0f; col.green=col.blue=0.0f; rng.addIon("A","A",col); + rng.addRange(0.5,1.5,rng.getIonID("A")); col.red=0.0f; col.blue=1.0f; rng.addIon("B","B",col); - rng.addRange(0.5,1.5,rng.getIonID("B")); - rng.addRange(1.5,2.5,rng.getIonID("B")); + rng.addRange(1.51,2.5,rng.getIonID("B")); vector ions; ions.resize(100); @@ -739,8 +775,10 @@ TEST(!countBinnedIons(ions,&rng,selectedIons,segOpt,g), "binomial binning (auto brick mode)"); + //Check that we counted at least 30% of the ions + TEST(g.size() > ions.size()/segOpt.nIons*0.3,"Full bricks only"); //Check that the number of grids is less than the number of ions - TEST(g.size() < ions.size()/segOpt.nIons,"Full bricks only"); + TEST(g.size() <=ions.size()/segOpt.nIons,"Full bricks only"); size_t total=0; for(size_t ui=0;ui &completedGridEntries); //Generate a vector of ion frequencies in histogram of segment counts, +// nSelected is the number of ions selected for binomial analysis, +// as given to countBinnedIons void genBinomialHistogram(const std::vector &completedGridEntries, unsigned int nSelected, BINOMIAL_HIST &binHist); //convert grid frequencies to compositions - void binomialConvert(const std::vector > &ionFrequencies,float binWidth, std::vector > &ionConcentrations); -void computeBinomialStats(const std::vector &gridEntries,const BINOMIAL_HIST &binHist, +//Compute the statistics in BINOMIAL_STATS , and binHist.theoreticFrequencies. +void computeBinomialStats(const std::vector &gridEntries,BINOMIAL_HIST &binHist, unsigned int nSelected, BINOMIAL_STATS &binStats); #ifdef DEBUG diff -Nru 3depict-0.0.19-1/src/backend/filters/algorithms/rdf.cpp 3depict-0.0.20/src/backend/filters/algorithms/rdf.cpp --- 3depict-0.0.19-1/src/backend/filters/algorithms/rdf.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/algorithms/rdf.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1059 +0,0 @@ - /* - * rdf.cpp - Radial distribution function implentation - * Copyright (C) 2015 D Haley - * - * 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 3 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, see . - */ - -#include "rdf.h" - -#include "../filterCommon.h" - -#include - -using std::vector; - -#ifdef _OPENMP -#include -#endif -//QHull library -//Build fix for qhull ; wx defines powerpc without -//assigning a value, causing build fail on powerpc -#ifdef __POWERPC__ - #pragma push_macro("__POWERPC__") - #define __POWERPC__ 1 -#endif -extern "C" -{ - #include -} -#ifdef __POWERPC__ - #pragma pop_macro("__POWERPC__") -#endif - -const unsigned int CALLBACK_REDUCE=5000; - -enum PointDir{ POINTDIR_TOGETHER =0, - POINTDIR_IN_COMMON, - POINTDIR_APART - }; -//!Check which way vectors attached to two 3D points "point", -/*! Two vectors may point "together", /__\ "apart" \__/ or - * "In common" /__/ or \__\ - */ -unsigned int vectorPointDir(const Point3D &pA, const Point3D &pB, - const Point3D &vC, const Point3D &vD) -{ - //Check which way vectors attached to two 3D points "point", - // - "together", "apart" or "in common" - - //calculate AB.CA, BA.DB - float dot1 = (pB-pA).dotProd(vC - pA); - float dot2= (pA - pB).dotProd(vD - pB); - - //We shall somewhat arbitrarily call perpendicular cases "together" - if(dot1 ==0.0f || dot2 == 0.0f) - return POINTDIR_TOGETHER; - - //If they have opposite signs, then they are "in common" - if(( dot1 < 0.0f && dot2 > 0.0f) || (dot1 > 0.0f && dot2 < 0.0f) ) - return POINTDIR_IN_COMMON; - - if( dot1 < 0.0f && dot2 <0.0f ) - return POINTDIR_APART; - - ASSERT(dot1 > 0.0f && dot2 > 0.0f ); - - return POINTDIR_TOGETHER; -} - -//! Returns the shortest distance between a line segment and a given point -/* The inputs are the ends of the line segment and the point. Uses the formula that - * \f$ - * D = \abs{\vec{PE}}\f$ - * \f[ - * \mathrm{~if~} \vec{PA} \cdot \vec{AB} > 0 - * \rightarrow \vec{PE} = \vec{A} - * \f] - * \f[ - * \mathrm{~if~} \vec{AB} \cdot \vec{PB} > 0 ~\&~ \vec{PA} \cdot \vec{AB} < 0 - * \rightarrow \vec{PB} \cdot \frac{\vec{AB}}{\abs{\vec{AB}}} - * \f] - * \f[ - * \mathrm{~if~} \vec{PB} \cdot \vec{AB} < 0 - * \rightarrow \vec{B} - * \f] - */ -float distanceToSegment(const Point3D &fA, const Point3D &fB, const Point3D &p) -{ - - //If the vectors a pointing "together" then use point-line formula - if(vectorPointDir(fA,fB,p,p) == POINTDIR_TOGETHER) - { - Point3D closestPt; - Point3D vAB= fB-fA; - - //Use formula d^2 = |(B-A)(cross)(A-P)|^2/|B-A|^2 - return sqrtf( (vAB.crossProd(fA-p)).sqrMag()/(vAB.sqrMag())); - } - - return sqrtf( std::min(fB.sqrDist(p), fA.sqrDist(p)) ); -} - - -//!Find the distance between a point, and a triangular facet -- may be positive or negative -/* The inputs are the facet points (ABC) and the point P. - * distance is shortest using standard plane version - * \f$ D = \vec{AB} \cdot \vec{n} \f$ - * iff dot products to each combination of \f$ \left( AP,BP,CP \right) \leq 0 \f$ - * otherwise closest point is on the boundary of the simplex. - * tested by shortest distance to each line segment (E is shortest pt. AB is line segement) - * \f$ \vec{E} = \frac{\vec{AB}}{|\vec{AB}|} - * ( \vec{PB} \cdot \vec{AB})\f$ - */ -float distanceToFacet(const Point3D &fA, const Point3D &fB, - const Point3D &fC, const Point3D &p, const Point3D &normal) -{ - - //This will check the magnitude of the incoming normal - ASSERT( fabs(sqrtf(normal.sqrMag()) - 1.0f) < 2.0* std::numeric_limits::epsilon()); - unsigned int pointDir[3]; - pointDir[0] = vectorPointDir(fA,fB,p,p); - pointDir[1] = vectorPointDir(fA,fC,p,p); - pointDir[2] = vectorPointDir(fB,fC,p,p); - - //They can never be "APART" if the - //vectors point to the same pt - ASSERT(pointDir[0] != POINTDIR_APART); - ASSERT(pointDir[1] != POINTDIR_APART); - ASSERT(pointDir[2] != POINTDIR_APART); - - //Check to see if any of them are "in common" - if(pointDir[0] > 0 || pointDir[1] >0 || pointDir[2] > 0) - { - //if so, we have to check each edge for its closest point - //then pick the best - float bestDist[3]; - bestDist[0] = distanceToSegment(fA,fB,p); - bestDist[1] = distanceToSegment(fA,fC,p); - bestDist[2] = distanceToSegment(fB,fC,p); - - - return std::min(bestDist[0],std::min(bestDist[1],bestDist[2])); - } - - float temp; - - temp = fabs((p-fA).dotProd(normal)); - - //check that the other points were not better than this! - ASSERT(sqrtf(fA.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); - ASSERT(sqrtf(fB.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); - ASSERT(sqrtf(fC.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); - - //Point lies above/below facet, use plane formula - return temp; -} - - -//A bigger MAX_NN_DISTS is better because you will attempt to grab more ram -//however there is a chance that memory allocation can fail, which currently I do not grab safely -const unsigned int MAX_NN_DISTS = 0x8000000; //96 MB samples at a time - - - -//obtains all the input points from ions that lie inside the convex hull after -//it has been shrunk such that the closest distance from the hull to the original data -//is reductionDim -unsigned int GetReducedHullPts(const vector &points, float reductionDim, - unsigned int *progress, ATOMIC_BOOL &wantAbort, vector &pointResult) -{ - //TODO: This could be made to use a fixed amount of ram, by - //partitioning the input points, and then - //computing multiple hulls. - //Take the resultant hull points, then hull again. This would be - //much more space efficient, and more easily parallellised - //Alternately, compute a for a randoms K set of points, and reject - //points that lie in the hull from further computation - - //Need at least 4 points to define a hull in 3D - if(points.size() < 4) - return 1; - - unsigned int dummyProg; - vector theHull; - if(computeConvexHull(points,progress,wantAbort,theHull,false,false)) - return 2; - - Point3D midPoint(0,0,0); - for(size_t ui=0;uisimplicial); - vertex = (vertexT *)curFac->vertices->e[ui].p; - while(vertex) - { //copy the vertex info into the pt array - (ptArray[ui])[0] = vertex->point[0]; - (ptArray[ui])[1] = vertex->point[1]; - (ptArray[ui])[2] = vertex->point[2]; - - //aggregate pyramidal points - pyramidCentroid += ptArray[ui]; - - //increment before updating vertex - //to allow checking for NULL termination - ui++; - vertex = (vertexT *)curFac->vertices->e[ui].p; - - } - - //note that this counter has been post incremented. - ASSERT(ui ==3); - vol = pyramidVol(ptArray,midPoint); - - ASSERT(vol>=0); - - //Find the midpoint of the pyramid, this will be the - //same as its centre of mass. - pyramidCentroid*= 0.25f; - hullCentroid = hullCentroid + (pyramidCentroid*vol); - massPyramids+=vol; - - curFac=curFac->next; - } - - hullCentroid *= 1.0f/massPyramids; - - float minDist=std::numeric_limits::max(); - //find the smallest distance between the centroid and the - //convex hull - curFac=qh facet_list; - while(curFac != qh facet_tail) - { - float temp; - Point3D vertexPt[3]; - - //The shortest distance from the plane to the point - //is the dot product of the UNIT normal with - //A-B, where B is on plane, A is point in question - for(unsigned int ui=0; ui<3; ui++) - { - vertexT *vertex; - //grab vertex - vertex = ((vertexT *)curFac->vertices->e[ui].p); - vertexPt[ui] = Point3D(vertex->point[0],vertex->point[1],vertex->point[2]); - } - - //Find the distance between hull centroid and a given facet - temp = distanceToFacet(vertexPt[0],vertexPt[1],vertexPt[2],hullCentroid, - Point3D(curFac->normal[0],curFac->normal[1],curFac->normal[2])); - - if(temp < minDist) - minDist = temp; - - curFac=curFac->next; - } - - //shrink the convex hull such that it lies at - //least reductionDim from the original surface of - //the convex hull - float scaleFactor; - scaleFactor = 1 - reductionDim/ minDist; - - if(scaleFactor < 0.0f) - return RDF_ERR_NEGATIVE_SCALE_FACT; - - - //now scan through the input points and see if they - //lie in the reduced convex hull - vertexT *vertex = qh vertex_list; - - unsigned int ui=0; - while(vertex !=qh vertex_tail) - { - //Translate around hullCentroid before scaling, - //then undo translation after scale - //Modify the vertex data such that it is scaled around the hullCentroid - vertex->point[0] = (vertex->point[0] - hullCentroid[0])*scaleFactor + hullCentroid[0]; - vertex->point[1] = (vertex->point[1] - hullCentroid[1])*scaleFactor + hullCentroid[1]; - vertex->point[2] = (vertex->point[2] - hullCentroid[2])*scaleFactor + hullCentroid[2]; - - vertex = vertex->next; - ui++; - } - - //if the dot product of the normal with the point vector of the - //considered point P, to any vertex on all of the facets of the - //convex hull F1, F2, ... , Fn is negative, - //then P does NOT lie inside the convex hull. - pointResult.reserve(points.size()/2); - curFac = qh facet_list; - - //minimum distance from centroid to convex hull - for(unsigned int ui=points.size(); ui--;) - { - float fX,fY,fZ; - double *ptArr,*normalArr; - fX =points[ui][0]; - fY = points[ui][1]; - fZ = points[ui][2]; - - //loop through the facets - curFac = qh facet_list; - while(curFac != qh facet_tail) - { - //Dont ask. It just grabs the first coords of the vertex - //associated with this facet - ptArr = ((vertexT *)curFac->vertices->e[0].p)->point; - - normalArr = curFac->normal; - //if the dotproduct is negative, then the point vector from the - //point in question to the surface is in opposite to the outwards facing - //normal, which means the point lies outside the hull - if (dotProduct( (float)ptArr[0] - fX, - (float)ptArr[1] - fY, - (float)ptArr[2] - fZ, - normalArr[0], normalArr[1], - normalArr[2]) >= 0) - { - curFac=curFac->next; - continue; - } - goto reduced_loop_next; - } - //we passed all tests, point is inside convex hull - pointResult.push_back(points[ui]); - -reduced_loop_next: - ; - } - - freeConvexHull(); - - return 0; -} - -//!Generate an NN histogram using NN-max cutoffs -unsigned int generateNNHist( const vector &pointList, - const K3DTree &tree,unsigned int nnMax, unsigned int numBins, - vector > &histogram, float *binWidth , unsigned int *progressPtr, - ATOMIC_BOOL &wantAbort) -{ - if(pointList.size() <=nnMax) - return RDF_ERR_INSUFFICIENT_INPUT_POINTS; - - //Disallow exact matching for NNs - float deadDistSqr; - deadDistSqr= std::numeric_limits::epsilon(); - - //calclate NNs - BoundCube cube; - cube.setBounds(pointList); - - //Allocate and assign the initial max distances - float *maxSqrDist= new float[nnMax]; - for(unsigned int ui=0; ui nnPoints; - tree.findKNearest(pointList[ui],cube, - nnMax,nnPoints,deadDistSqr); - - - - for(unsigned int uj=0; ujsqrDist(pointList[ui]); - if(temp > maxSqrDist[uj]) - maxSqrDist[uj] = temp; - } - - - //Callbacks to perform UI updates as needed - if(!(callbackReduce--)) - { -#ifdef _OPENMP - #pragma omp critical - { - numAnalysed+=CALLBACK_REDUCE; - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); - if(wantAbort) - spin=true; - } -#else - *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*50.0f); - if(wantAbort) - { - delete[] maxSqrDist; - return RDF_ABORT_FAIL; - } -#endif - callbackReduce=CALLBACK_REDUCE; - } - - } -#ifdef _OPENMP - if(spin) - { - delete[] maxSqrDist; - return RDF_ABORT_FAIL; - } -#endif - - - float maxOfMaxDists=0; - float *maxDist=new float[nnMax]; - for(unsigned int ui=0; ui nnPoints; -#ifdef _OPENMP - if(spin) - continue; -#endif - - tree.findKNearest(pointList[ui],cube, - nnMax, nnPoints); - - for(unsigned int uj=0; ujsqrDist(pointList[ui])); - offsetTemp = (unsigned int)(temp/binWidth[uj]); - - //Prevent overflow due to temp/binWidth exceeding array dimension - //as (temp is <= binwidth, not < binWidth) - if(offsetTemp == numBins) - offsetTemp--; - ASSERT(offsetTemp < nnMax*numBins); - - (histogram[uj])[offsetTemp]++; - } - - - //Callbacks to perform UI updates as needed -#ifdef _OPENMP - if(!(callbackReduce--)) - { - #pragma omp critical - { - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*50.0f + 50.0f); - if(wantAbort) - spin=true; - numAnalysed+=CALLBACK_REDUCE; - } - callbackReduce=CALLBACK_REDUCE; - } -#else - if(!(callbackReduce--)) - { - *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*50.0f + 50.0f); - if(wantAbort) - { - delete[] maxSqrDist; - return RDF_ABORT_FAIL; - } - callbackReduce=CALLBACK_REDUCE; - } -#endif - } - delete[] maxSqrDist; - -#ifdef _OPENMP - if(spin) - return RDF_ABORT_FAIL; -#endif - - return 0; -} - - -unsigned int generate1DAxialDistHist(const vector &pointList, const K3DTree &tree, - const Point3D &axisDir, unsigned int *histogram, float distMax, unsigned int numBins, - unsigned int *progressPtr, ATOMIC_BOOL &wantAbort) -{ - ASSERT(fabs(axisDir.sqrMag() -1.0f) < sqrt(std::numeric_limits::epsilon())); -#ifdef DEBUG - for(unsigned int ui=0;ui epsilon - deadDistSqr=std::numeric_limits::epsilon(); - sqrDist=0; - sourcePoint=pointList[ui]; - while(deadDistSqr < maxSqrDist) - { - - //Grab the nearest point - nearPt = tree.findNearest(sourcePoint, cube, - deadDistSqr); - - if(nearPt) - { - //Cacluate the sq of the distance to the point - sqrDist = nearPt->sqrDist(sourcePoint); - - //if sqrDist is = maxSqrdist then this will cause - //the histogram indexing to trash alternate memory - //- this is bad - prevent this please. - if(sqrDist < maxSqrDist) - { - //Compute the projection of - // the point onto the axis of the - // primary analysis direction - float distance; - distance=(*nearPt-sourcePoint).dotProd(axisDir); - - //update the histogram with the new position. - // centre of the distribution function lies at the analysis point, - // and can be either negative or positive. - // Shift the zero to the center of the histogram - int offset=(int)(((0.5f*distance)/distMax+0.5f)*(float)numBins); - if(offset < (int)numBins && offset >=0) - { -#pragma omp critical - histogram[offset]++; - } - } - - //increase the dead distance to the last distance - deadDistSqr = sqrDist+std::numeric_limits::epsilon(); - } - else - { - //Oh no, we had a problem, somehow we couldn't find enough -#pragma omp critical - warnBiasCount++; - break; - } - - } - - - //Run callbacks as needed - if(!(callbackReduce--)) - { -#pragma omp critical - { - numAnalysed+=CALLBACK_REDUCE_VAL; - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); - if(wantAbort) - { -#ifdef _OPENMP - spin=true; -#else - return RDF_ABORT_FAIL; -#endif - } - } - callbackReduce=CALLBACK_REDUCE_VAL; - } - - } -#ifdef _OPENMP - if(spin) - return RDF_ABORT_FAIL; -#endif - *progressPtr=100; - return 0; -} - - -unsigned int generate1DAxialNNHist(const vector &pointList, const K3DTree &tree, - const Point3D &axisDir, unsigned int *histogram, float &binWidth, unsigned int nnMax, unsigned int numBins, - unsigned int *progressPtr, ATOMIC_BOOL &wantAbort) -{ -#ifdef DEBUG - for(unsigned int ui=0;ui::epsilon(); - - //calclate NNs - BoundCube cube; - cube.setBounds(pointList); - - //Allocate and assign the initial max distances - float *maxAxialDist= new float[nnMax]; - for(unsigned int ui=0; ui nnPoints; - tree.findKNearest(pointList[ui],cube, - nnMax,nnPoints,deadDistSqr); - - for(unsigned int uj=0; uj maxAxialDist[uj]) - maxAxialDist[uj] = temp; - } - - - //Callbacks to perform UI updates as needed - if(!(callbackReduce--)) - { -#ifdef _OPENMP - #pragma omp critical - { - numAnalysed+=CALLBACK_REDUCE; - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); - if(wantAbort) - spin=true; - } -#else - *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); - if(wantAbort) - { - delete[] maxAxialDist; - return RDF_ABORT_FAIL; - } -#endif - callbackReduce=CALLBACK_REDUCE; - } - - } -#ifdef _OPENMP - if(spin) - { - delete[] maxAxialDist; - return RDF_ABORT_FAIL; - } -#endif - - - float maxOfMaxDists=0; - for(unsigned int ui=0; ui nnPoints; -#ifdef _OPENMP - if(spin) - continue; -#endif - - tree.findKNearest(pointList[ui],cube, - nnMax, nnPoints); - - for(unsigned int uj=0; uj=0) - { - //TODO: OpenMP could use multiple histograms - // rather than locking -#pragma omp critical - histogram[offset]++; - } - } - - - //Callbacks to check for abort as needed -#ifdef _OPENMP - if(!(callbackReduce--)) - { - #pragma omp critical - { - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); - if(wantAbort) - spin=true; - numAnalysed+=CALLBACK_REDUCE; - } - callbackReduce=CALLBACK_REDUCE; - } -#else - if(!(callbackReduce--)) - { - *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); - if(wantAbort) - { - delete[] maxAxialDist; - return RDF_ABORT_FAIL; - } - callbackReduce=CALLBACK_REDUCE; - } -#endif - } - delete[] maxAxialDist; - -#ifdef _OPENMP - if(spin) - return RDF_ABORT_FAIL; -#endif - - return 0; -} - - -//!Generate an NN histogram using distance max cutoffs. Input histogram must be zeroed, -unsigned int generateDistHist(const vector &pointList, const K3DTree &tree, - unsigned int *histogram, float distMax, - unsigned int numBins, unsigned int &warnBiasCount, - unsigned int *progressPtr,ATOMIC_BOOL &wantAbort) -{ - - -#ifdef DEBUG - for(unsigned int ui=0;ui epsilon - deadDistSqr=std::numeric_limits::epsilon(); - sqrDist=0; - sourcePoint=pointList[ui]; - while(deadDistSqr < maxSqrDist) - { - - //Grab the nearest point - nearPt = tree.findNearest(sourcePoint, cube, - deadDistSqr); - - if(nearPt) - { - //Cacluate the sq of the distance to the point - sqrDist = nearPt->sqrDist(sourcePoint); - - //if sqrDist is = maxSqrdist then this will cause - //the histogram indexing to trash alternate memory - //- this is bad - prevent this please. - if(sqrDist < maxSqrDist) - { - //Add the point to the histogram -#ifdef _OPENMP - threadHist[(size_t) ((sqrtf(sqrDist/maxSqrDist)*(float)numBins))] [omp_get_thread_num()]++; -#else - histogram[(size_t)((sqrtf(sqrDist/maxSqrDist)*(float)numBins))]++; -#endif - } - - //increase the dead distance to the last distance - deadDistSqr = sqrDist+std::numeric_limits::epsilon(); - } - else - { - //Oh no, we had a problem, somehow we couldn't find enough -#pragma omp critical - warnBiasCount++; - break; - } - - - if(!(callbackReduce--)) - { -#ifdef _OPENMP - #pragma omp critical - { - numAnalysed+=numAnalysedThread; - *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); - if(wantAbort) - spin=true; - } - if(spin) - break; - numAnalysedThread=0; -#else - *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); - if(wantAbort) - return RDF_ABORT_FAIL; -#endif - callbackReduce=CALLBACK_REDUCE; - } - } -#ifdef _OPENMP - numAnalysedThread++; -#endif - } - -#ifdef _OPENMP - if(spin) - return RDF_ABORT_FAIL; - - for (size_t i = 0; i < numBins; i++) - { - for (size_t j = 0; j < omp_get_max_threads(); j++) - histogram[i] += threadHist[i][j]; - } -#endif - - //Calculations complete! - return 0; -} - - - -void generateKnnTheoreticalDist(const std::vector &radii, float density, unsigned int nn, - std::vector &nnDist) -{ - ASSERT(density >=0); - ASSERT(nn>0); - //Reference :Stephenson, 2009, simplified using D=3 - - //Distribution requires evaluation of : - //- the gamma function gamma(5/2) - const float GAMMA_2PT5 = 1.32934038817914; - // - power of pi : pi^(D/2) - const float PI_POW_D_2 = pow(M_PI,3.0/2.0); - - const float LAMBDA_FACTOR = PI_POW_D_2/GAMMA_2PT5; - - double pBase,lambda; - - //radius independent component - lambda = density*LAMBDA_FACTOR; - pBase = 3.0/gsl_sf_fact(nn-1); - pBase*= pow(lambda,nn); - - - nnDist.resize(radii.size()); - for(size_t ui=0;ui. - */ - -#ifndef RDF_H -#define RDF_H - -#include "K3DTree.h" - - -//RDF error codes -enum -{ - RDF_ERR_NEGATIVE_SCALE_FACT=1, - RDF_ERR_INSUFFICIENT_INPUT_POINTS, - RDF_FILE_OPEN_FAIL, - RDF_ABORT_FAIL -}; - -//!Generate the NN histogram specified up to a given NN -unsigned int generateNNHist( const std::vector &pointList, - const K3DTree &tree,unsigned int nnMax, unsigned int numBins, - std::vector > &histogram, float *binWidth, - unsigned int *progressPtr,ATOMIC_BOOL &wantAbort); - -//!Generate an NN histogram using distance max cutoffs. Input histogram must be zeroed, -//if a voxelsname is given, a 3D RDF will be recorded. in this case voxelBins must be nonzero -unsigned int generateDistHist(const std::vector &pointList, const K3DTree &tree, - unsigned int *histogram, float distMax, - unsigned int numBins, unsigned int &warnBiasCount, - unsigned int *progressPtr,ATOMIC_BOOL &wantAbort); - -//!Returns a subset of points guaranteed to lie at least reductionDim inside hull of input points -/*! Calculates the hull of the input ions and then scales the hull such that the - * smallest distance between the scaled hull and the original hull is exactly - * reductionDim - */ -unsigned int GetReducedHullPts(const std::vector &pts, float reductionDim, - unsigned int *progress, ATOMIC_BOOL &wantAbort, std::vector &returnIons ); - - -//Return a 1D histogram of NN frequencies, by projecting the NNs within a given search onto a specified axis, stopping at some fixed sstance -// radius onto a specified vector prior to histogram summation. -// - axisDir must be normalised. -unsigned int generate1DAxialDistHist(const std::vector &pointList, const K3DTree &tree, - const Point3D &axisDir, unsigned int *histogram, float distMax, unsigned int numBins, - unsigned int *progressPtr, ATOMIC_BOOL &wantAbort); - - -//Generate a 1D distribution of NN distances s projected onto a specified axis -// Inputs are the axis to project onto, a prezeroed 1D histogram array (size numBIns), -// and the input data points (search src) and tree (search target) -// Outputs are the histogram values , and the bin width for the histogram -unsigned int generate1DAxialNNHist(const std::vector &pointList, const K3DTree &tree, - const Point3D &axisDir, unsigned int *histogram, - float &binWidth, unsigned int nnMax, unsigned int numBins, - unsigned int *progressPtr, ATOMIC_BOOL &wantAbort); - - -//generate the Knn probability distribution for a given nn occurring at a radius in 3D space -// with a fixed density parameter. Radii are the positions to evaluate the distribution -// nnDist will store the answer. It is required that both density >=0 and nn >0. -void generateKnnTheoreticalDist(const std::vector &radii, float density, unsigned int nn, - std::vector &nnDist); -#endif diff -Nru 3depict-0.0.19-1/src/backend/filters/algorithms/spatial.cpp 3depict-0.0.20/src/backend/filters/algorithms/spatial.cpp --- 3depict-0.0.19-1/src/backend/filters/algorithms/spatial.cpp 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/algorithms/spatial.cpp 2017-01-21 11:37:25.000000000 +0000 @@ -0,0 +1,1174 @@ + /* + * spatial.cpp - Radial distribution function implentation + * Copyright (C) 2015 D Haley + * + * 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 3 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, see . + */ + +#include "spatial.h" + +#include "../filterCommon.h" + +#include + +using std::vector; + +#ifdef _OPENMP +#include +#endif +//QHull library +//Build fix for qhull ; wx defines powerpc without +//assigning a value, causing build fail on powerpc +#ifdef __POWERPC__ + #pragma push_macro("__POWERPC__") + #define __POWERPC__ 1 +#endif +extern "C" +{ + #include +} +#ifdef __POWERPC__ + #pragma pop_macro("__POWERPC__") +#endif + +const unsigned int CALLBACK_REDUCE=5000; + +enum PointDir{ POINTDIR_TOGETHER =0, + POINTDIR_IN_COMMON, + POINTDIR_APART + }; +//!Check which way vectors attached to two 3D points "point", +/*! Two vectors may point "together", /__\ "apart" \__/ or + * "In common" /__/ or \__\ + */ +unsigned int vectorPointDir(const Point3D &pA, const Point3D &pB, + const Point3D &vC, const Point3D &vD) +{ + //Check which way vectors attached to two 3D points "point", + // - "together", "apart" or "in common" + + //calculate AB.CA, BA.DB + float dot1 = (pB-pA).dotProd(vC - pA); + float dot2= (pA - pB).dotProd(vD - pB); + + //We shall somewhat arbitrarily call perpendicular cases "together" + if(dot1 ==0.0f || dot2 == 0.0f) + return POINTDIR_TOGETHER; + + //If they have opposite signs, then they are "in common" + if(( dot1 < 0.0f && dot2 > 0.0f) || (dot1 > 0.0f && dot2 < 0.0f) ) + return POINTDIR_IN_COMMON; + + if( dot1 < 0.0f && dot2 <0.0f ) + return POINTDIR_APART; + + ASSERT(dot1 > 0.0f && dot2 > 0.0f ); + + return POINTDIR_TOGETHER; +} + +//! Returns the shortest distance between a line segment and a given point +/* The inputs are the ends of the line segment and the point. Uses the formula that + * \f$ + * D = \abs{\vec{PE}}\f$ + * \f[ + * \mathrm{~if~} \vec{PA} \cdot \vec{AB} > 0 + * \rightarrow \vec{PE} = \vec{A} + * \f] + * \f[ + * \mathrm{~if~} \vec{AB} \cdot \vec{PB} > 0 ~\&~ \vec{PA} \cdot \vec{AB} < 0 + * \rightarrow \vec{PB} \cdot \frac{\vec{AB}}{\abs{\vec{AB}}} + * \f] + * \f[ + * \mathrm{~if~} \vec{PB} \cdot \vec{AB} < 0 + * \rightarrow \vec{B} + * \f] + */ +float distanceToSegment(const Point3D &fA, const Point3D &fB, const Point3D &p) +{ + + //If the vectors a pointing "together" then use point-line formula + if(vectorPointDir(fA,fB,p,p) == POINTDIR_TOGETHER) + { + Point3D closestPt; + Point3D vAB= fB-fA; + + //Use formula d^2 = |(B-A)(cross)(A-P)|^2/|B-A|^2 + return sqrtf( (vAB.crossProd(fA-p)).sqrMag()/(vAB.sqrMag())); + } + + return sqrtf( std::min(fB.sqrDist(p), fA.sqrDist(p)) ); +} + + +//!Find the distance between a point, and a triangular facet -- may be positive or negative +/* The inputs are the facet points (ABC) and the point P. + * distance is shortest using standard plane version + * \f$ D = \vec{AB} \cdot \vec{n} \f$ + * iff dot products to each combination of \f$ \left( AP,BP,CP \right) \leq 0 \f$ + * otherwise closest point is on the boundary of the simplex. + * tested by shortest distance to each line segment (E is shortest pt. AB is line segement) + * \f$ \vec{E} = \frac{\vec{AB}}{|\vec{AB}|} + * ( \vec{PB} \cdot \vec{AB})\f$ + */ +float distanceToFacet(const Point3D &fA, const Point3D &fB, + const Point3D &fC, const Point3D &p, const Point3D &normal) +{ + + //This will check the magnitude of the incoming normal + ASSERT( fabs(sqrtf(normal.sqrMag()) - 1.0f) < 2.0* std::numeric_limits::epsilon()); + unsigned int pointDir[3]; + pointDir[0] = vectorPointDir(fA,fB,p,p); + pointDir[1] = vectorPointDir(fA,fC,p,p); + pointDir[2] = vectorPointDir(fB,fC,p,p); + + //They can never be "APART" if the + //vectors point to the same pt + ASSERT(pointDir[0] != POINTDIR_APART); + ASSERT(pointDir[1] != POINTDIR_APART); + ASSERT(pointDir[2] != POINTDIR_APART); + + //Check to see if any of them are "in common" + if(pointDir[0] > 0 || pointDir[1] >0 || pointDir[2] > 0) + { + //if so, we have to check each edge for its closest point + //then pick the best + float bestDist[3]; + bestDist[0] = distanceToSegment(fA,fB,p); + bestDist[1] = distanceToSegment(fA,fC,p); + bestDist[2] = distanceToSegment(fB,fC,p); + + + return std::min(bestDist[0],std::min(bestDist[1],bestDist[2])); + } + + float temp; + + temp = fabs((p-fA).dotProd(normal)); + + //check that the other points were not better than this! + ASSERT(sqrtf(fA.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); + ASSERT(sqrtf(fB.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); + ASSERT(sqrtf(fC.sqrDist(p)) >= temp - std::numeric_limits::epsilon()); + + //Point lies above/below facet, use plane formula + return temp; +} + + +//A bigger MAX_NN_DISTS is better because you will attempt to grab more ram +//however there is a chance that memory allocation can fail, which currently I do not grab safely +const unsigned int MAX_NN_DISTS = 0x8000000; //96 MB samples at a time + + + +//obtains all the input points from ions that lie inside the convex hull after +//it has been shrunk such that the closest distance from the hull to the original data +//is reductionDim +unsigned int GetReducedHullPts(const vector &points, float reductionDim, + unsigned int *progress, ATOMIC_BOOL &wantAbort, vector &pointResult) +{ + //TODO: This could be made to use a fixed amount of ram, by + //partitioning the input points, and then + //computing multiple hulls. + //Take the resultant hull points, then hull again. This would be + //much more space efficient, and more easily parallellised + //Alternately, compute a for a randoms K set of points, and reject + //points that lie in the hull from further computation + + //Need at least 4 points to define a hull in 3D + if(points.size() < 4) + return 1; + + unsigned int dummyProg; + vector theHull; + if(computeConvexHull(points,progress,wantAbort,theHull,false,false)) + return 2; + + Point3D midPoint(0,0,0); + for(size_t ui=0;uisimplicial); + vertex = (vertexT *)curFac->vertices->e[ui].p; + while(vertex) + { //copy the vertex info into the pt array + (ptArray[ui])[0] = vertex->point[0]; + (ptArray[ui])[1] = vertex->point[1]; + (ptArray[ui])[2] = vertex->point[2]; + + //aggregate pyramidal points + pyramidCentroid += ptArray[ui]; + + //increment before updating vertex + //to allow checking for NULL termination + ui++; + vertex = (vertexT *)curFac->vertices->e[ui].p; + + } + + //note that this counter has been post incremented. + ASSERT(ui ==3); + vol = pyramidVol(ptArray,midPoint); + + ASSERT(vol>=0); + + //Find the midpoint of the pyramid, this will be the + //same as its centre of mass. + pyramidCentroid*= 0.25f; + hullCentroid = hullCentroid + (pyramidCentroid*vol); + massPyramids+=vol; + + curFac=curFac->next; + } + + hullCentroid *= 1.0f/massPyramids; + + float minDist=std::numeric_limits::max(); + //find the smallest distance between the centroid and the + //convex hull + curFac=qh facet_list; + while(curFac != qh facet_tail) + { + float temp; + Point3D vertexPt[3]; + + //The shortest distance from the plane to the point + //is the dot product of the UNIT normal with + //A-B, where B is on plane, A is point in question + for(unsigned int ui=0; ui<3; ui++) + { + vertexT *vertex; + //grab vertex + vertex = ((vertexT *)curFac->vertices->e[ui].p); + vertexPt[ui] = Point3D(vertex->point[0],vertex->point[1],vertex->point[2]); + } + + //Find the distance between hull centroid and a given facet + temp = distanceToFacet(vertexPt[0],vertexPt[1],vertexPt[2],hullCentroid, + Point3D(curFac->normal[0],curFac->normal[1],curFac->normal[2])); + + if(temp < minDist) + minDist = temp; + + curFac=curFac->next; + } + + //shrink the convex hull such that it lies at + //least reductionDim from the original surface of + //the convex hull + float scaleFactor; + scaleFactor = 1 - reductionDim/ minDist; + + if(scaleFactor < 0.0f) + return RDF_ERR_NEGATIVE_SCALE_FACT; + + + //now scan through the input points and see if they + //lie in the reduced convex hull + vertexT *vertex = qh vertex_list; + + unsigned int ui=0; + while(vertex !=qh vertex_tail) + { + //Translate around hullCentroid before scaling, + //then undo translation after scale + //Modify the vertex data such that it is scaled around the hullCentroid + vertex->point[0] = (vertex->point[0] - hullCentroid[0])*scaleFactor + hullCentroid[0]; + vertex->point[1] = (vertex->point[1] - hullCentroid[1])*scaleFactor + hullCentroid[1]; + vertex->point[2] = (vertex->point[2] - hullCentroid[2])*scaleFactor + hullCentroid[2]; + + vertex = vertex->next; + ui++; + } + + //if the dot product of the normal with the point vector of the + //considered point P, to any vertex on all of the facets of the + //convex hull F1, F2, ... , Fn is negative, + //then P does NOT lie inside the convex hull. + pointResult.reserve(points.size()/2); + curFac = qh facet_list; + + //minimum distance from centroid to convex hull + for(unsigned int ui=points.size(); ui--;) + { + float fX,fY,fZ; + double *ptArr,*normalArr; + fX =points[ui][0]; + fY = points[ui][1]; + fZ = points[ui][2]; + + //loop through the facets + curFac = qh facet_list; + while(curFac != qh facet_tail) + { + //Dont ask. It just grabs the first coords of the vertex + //associated with this facet + ptArr = ((vertexT *)curFac->vertices->e[0].p)->point; + + normalArr = curFac->normal; + //if the dotproduct is negative, then the point vector from the + //point in question to the surface is in opposite to the outwards facing + //normal, which means the point lies outside the hull + if (dotProduct( (float)ptArr[0] - fX, + (float)ptArr[1] - fY, + (float)ptArr[2] - fZ, + normalArr[0], normalArr[1], + normalArr[2]) >= 0) + { + curFac=curFac->next; + continue; + } + goto reduced_loop_next; + } + //we passed all tests, point is inside convex hull + pointResult.push_back(points[ui]); + +reduced_loop_next: + ; + } + + freeConvexHull(); + + return 0; +} + +//!Generate an NN histogram using NN-max cutoffs +unsigned int generateNNHist( const vector &pointList, + const K3DTree &tree,unsigned int nnMax, unsigned int numBins, + vector > &histogram, float *binWidth , unsigned int *progressPtr, + ATOMIC_BOOL &wantAbort) +{ + if(pointList.size() <=nnMax) + return RDF_ERR_INSUFFICIENT_INPUT_POINTS; + + //Disallow exact matching for NNs + float deadDistSqr; + deadDistSqr= std::numeric_limits::epsilon(); + + //calclate NNs + BoundCube cube; + cube.setBounds(pointList); + + //Allocate and assign the initial max distances + float *maxSqrDist= new float[nnMax]; + for(unsigned int ui=0; ui nnPoints; + tree.findKNearest(pointList[ui],cube, + nnMax,nnPoints,deadDistSqr); + + + + for(unsigned int uj=0; ujsqrDist(pointList[ui]); + if(temp > maxSqrDist[uj]) + maxSqrDist[uj] = temp; + } + + + //Callbacks to perform UI updates as needed + if(!(callbackReduce--)) + { +#ifdef _OPENMP + #pragma omp critical + { + numAnalysed+=CALLBACK_REDUCE; + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); + if(wantAbort) + spin=true; + } +#else + *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*50.0f); + if(wantAbort) + { + delete[] maxSqrDist; + return RDF_ABORT_FAIL; + } +#endif + callbackReduce=CALLBACK_REDUCE; + } + + } +#ifdef _OPENMP + if(spin) + { + delete[] maxSqrDist; + return RDF_ABORT_FAIL; + } +#endif + + + float maxOfMaxDists=0; + float *maxDist=new float[nnMax]; + for(unsigned int ui=0; ui nnPoints; +#ifdef _OPENMP + if(spin) + continue; +#endif + + tree.findKNearest(pointList[ui],cube, + nnMax, nnPoints); + + for(unsigned int uj=0; ujsqrDist(pointList[ui])); + offsetTemp = (unsigned int)(temp/binWidth[uj]); + + //Prevent overflow due to temp/binWidth exceeding array dimension + //as (temp is <= binwidth, not < binWidth) + if(offsetTemp == numBins) + offsetTemp--; + ASSERT(offsetTemp < nnMax*numBins); + + (histogram[uj])[offsetTemp]++; + } + + + //Callbacks to perform UI updates as needed +#ifdef _OPENMP + if(!(callbackReduce--)) + { + #pragma omp critical + { + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*50.0f + 50.0f); + if(wantAbort) + spin=true; + numAnalysed+=CALLBACK_REDUCE; + } + callbackReduce=CALLBACK_REDUCE; + } +#else + if(!(callbackReduce--)) + { + *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*50.0f + 50.0f); + if(wantAbort) + { + delete[] maxSqrDist; + return RDF_ABORT_FAIL; + } + callbackReduce=CALLBACK_REDUCE; + } +#endif + } + delete[] maxSqrDist; + +#ifdef _OPENMP + if(spin) + return RDF_ABORT_FAIL; +#endif + + return 0; +} + + +unsigned int generate1DAxialDistHist(const vector &pointList, const K3DTreeMk2 &tree, + const Point3D &axisDir, unsigned int *histogram, float distMax, unsigned int numBins, + unsigned int *progressPtr, ATOMIC_BOOL &wantAbort) +{ + //Check that the axis is normalised + ASSERT(EQ_TOL(axisDir.sqrMag(),1.0f)); +#ifdef DEBUG + //Ensure that histogram is initially zeroed + for(unsigned int ui=0;ui nnPts; + tree.ptsInSphere(pointList[ui],distMax,nnPts); + + for(unsigned int uj=0;uj::epsilon()) + continue; + //Compute the projection of the point onto the axis of the + // primary analysis direction + float distance; + distance=deltaVec.dotProd(axisDir); + + //update the histogram with the new position. + // centre of the distribution function lies at the analysis point, + // and can be either negative or positive. + // Shift the zero to the center of the histogram + int offset=(int)(((0.5f*distance)/distMax+0.5f)*(float)numBins); + if(offset < (int)numBins && offset >=0) + { +#pragma omp critical + histogram[offset]++; + } + + } + + + //Run callbacks as needed + if(!(callbackReduce--)) + { +#pragma omp critical + { + numAnalysed+=CALLBACK_REDUCE_VAL; + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); + if(wantAbort) + { +#ifdef _OPENMP + spin=true; +#else + return RDF_ABORT_FAIL; +#endif + } + } + callbackReduce=CALLBACK_REDUCE_VAL; + } + + } +#ifdef _OPENMP + if(spin) + return RDF_ABORT_FAIL; +#endif + *progressPtr=100; + return 0; +} + + +unsigned int generate1DAxialNNHist(const vector &pointList, const K3DTreeMk2 &tree, + const Point3D &axisDir, unsigned int *histogram, float &binWidth, unsigned int nnMax, unsigned int numBins, + unsigned int *progressPtr, ATOMIC_BOOL &wantAbort) +{ +#ifdef DEBUG + for(unsigned int ui=0;ui nnPoints; + size_t nnGood; + nnGood=0; + while(nnGood < nnMax) + { + size_t nn; + nn=tree.findNearestWithSkip(pointList[ui],cube,nnPoints); + + if(nn == (size_t)-1) + continue; + + //remember this point so we don't re-match it + nnPoints.insert(nn); + + //compute upper bound for plot output distance + float temp; + temp=fabs((tree.getPtRef(nn)-pointList[ui]).dotProd(axisDir)); + + if(temp < std::numeric_limits::epsilon()) + continue; + + //update max distance + maxAxialDist=std::max(maxAxialDist,temp); + + + nnGood++; + } + + + //Callbacks to perform UI updates as needed + if(!(callbackReduce--)) + { +#ifdef _OPENMP + #pragma omp critical + { + numAnalysed+=CALLBACK_REDUCE; + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); + if(wantAbort) + spin=true; + } +#else + *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); + if(wantAbort) + return RDF_ABORT_FAIL; +#endif + callbackReduce=CALLBACK_REDUCE; + } + + } +#ifdef _OPENMP + if(spin) + return RDF_ABORT_FAIL; +#endif + + + + //Calculate the bin widths required to accommodate this + //distribution + for(unsigned int ui=0; ui nns; + size_t nnGood; + nnGood=0; + while(nnGood < nnMax) + { + + size_t nn; + nn = tree.findNearestWithSkip(pointList[ui],cube,nns); + if(nn == (size_t)-1) + continue; + + //remember point so we don't re-match + nns.insert(nn); + + Point3D deltaVec; + deltaVec=tree.getPtRef(nn)-pointList[ui]; + + //Disallow self (or overlapped) matching + if(deltaVec.sqrMag() < std::numeric_limits::epsilon()) + continue; + + //Find the axial distance + float temp; + temp=deltaVec.dotProd(axisDir); + //Convert to position in array + int offset=(int)(((0.5f*temp)/maxAxialDist+0.5f)*numBins); + + if(offset < numBins && offset >=0) + { + //TODO: OpenMP could use multiple histograms + // rather than locking + //update histogram +#pragma omp critical + histogram[offset]++; + } + + nnGood++; + } + + + //Callbacks to check for abort as needed + if(!(callbackReduce--)) + { +#ifdef _OPENMP + #pragma omp critical + { + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); + if(wantAbort) + spin=true; + numAnalysed+=CALLBACK_REDUCE; + } +#else + *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); + if(wantAbort) + return RDF_ABORT_FAIL; +#endif + callbackReduce=CALLBACK_REDUCE; + } + } + +#ifdef _OPENMP + if(spin) + return RDF_ABORT_FAIL; +#endif + + *progressPtr=100; + + return 0; +} + + +//!Generate an NN histogram using distance max cutoffs. Input histogram must be zeroed, +unsigned int generateDistHist(const vector &pointList, const K3DTree &tree, + unsigned int *histogram, float distMax, + unsigned int numBins, unsigned int &warnBiasCount, + unsigned int *progressPtr,ATOMIC_BOOL &wantAbort) +{ + + +#ifdef DEBUG + for(unsigned int ui=0;ui epsilon + deadDistSqr=std::numeric_limits::epsilon(); + sqrDist=0; + sourcePoint=pointList[ui]; + while(deadDistSqr < maxSqrDist) + { + + //Grab the nearest point + nearPt = tree.findNearest(sourcePoint, cube, + deadDistSqr); + + if(nearPt) + { + //Cacluate the sq of the distance to the point + sqrDist = nearPt->sqrDist(sourcePoint); + + //if sqrDist is = maxSqrdist then this will cause + //the histogram indexing to trash alternate memory + //- this is bad - prevent this please. + if(sqrDist < maxSqrDist) + { + //Add the point to the histogram +#ifdef _OPENMP + threadHist[(size_t) ((sqrtf(sqrDist/maxSqrDist)*(float)numBins))] [omp_get_thread_num()]++; +#else + histogram[(size_t)((sqrtf(sqrDist/maxSqrDist)*(float)numBins))]++; +#endif + } + + //increase the dead distance to the last distance + deadDistSqr = sqrDist+std::numeric_limits::epsilon(); + } + else + { + //Oh no, we had a problem, somehow we couldn't find enough +#pragma omp critical + warnBiasCount++; + break; + } + + + if(!(callbackReduce--)) + { +#ifdef _OPENMP + #pragma omp critical + { + numAnalysed+=numAnalysedThread; + *progressPtr= (unsigned int)((float)(numAnalysed)/((float)pointList.size())*100.0f); + if(wantAbort) + spin=true; + } + if(spin) + break; + numAnalysedThread=0; +#else + *progressPtr= (unsigned int)((float)(ui)/((float)pointList.size())*100.0f); + if(wantAbort) + return RDF_ABORT_FAIL; +#endif + callbackReduce=CALLBACK_REDUCE; + } + } +#ifdef _OPENMP + numAnalysedThread++; +#endif + } + +#ifdef _OPENMP + if(spin) + return RDF_ABORT_FAIL; + + for (size_t i = 0; i < numBins; i++) + { + for (size_t j = 0; j < omp_get_max_threads(); j++) + histogram[i] += threadHist[i][j]; + } +#endif + + //Calculations complete! + *progressPtr=100; + + return 0; +} + + + +void generateKnnTheoreticalDist(const std::vector &radii, float density, unsigned int nn, + std::vector &nnDist) +{ + ASSERT(density >=0); + ASSERT(nn>0); + //Reference :Stephenson, 2009, simplified using D=3 + + //Distribution requires evaluation of : + //- the gamma function gamma(5/2) + const float GAMMA_2PT5 = 1.32934038817914; + // - power of pi : pi^(D/2) + const float PI_POW_D_2 = pow(M_PI,3.0/2.0); + + const float LAMBDA_FACTOR = PI_POW_D_2/GAMMA_2PT5; + + double pBase,lambda; + + //radius independent component + lambda = density*LAMBDA_FACTOR; + pBase = 3.0/gsl_sf_fact(nn-1); + pBase*= pow(lambda,nn); + + + nnDist.resize(radii.size()); + for(size_t ui=0;ui &pointList, K3DTreeMk2 &tree, + float distMax, float dTheta, float dPhi, unsigned int &prog, + std::vector > > &histogram) +{ + ASSERT(!histogram.empty()); + ASSERT(dTheta > 0.0f); + ASSERT(dPhi > 0.0f); + + //zero out histogram + for(size_t ui=0;ui=0.0f && tmpTheta<=1.05f*M_PI); + ASSERT(tmpPhi>=0&& tmpPhi<=2.1f*M_PI); + axisDir[ui][uj].setISOSpherical(tmpTheta,tmpPhi,1.0f); + + } + } + + + //Main r-max searching routine + +//construct worker threads + for(unsigned int uSrcPt=0; uSrcPt inSphereIdx; + + sourcePoint=pointList[uSrcPt]; + + //Grab the nearest point. Will tag on completion + tree.ptsInSphere(sourcePoint, distMax, inSphereIdx); + + + + //Loop through the points within the search radius and + // update the tag radius + #pragma omp parallel + for(size_t uPt=0; uPt=0 && offset < (int)DIST_BINS) + histogram[ui][uj][offset]++; + } + } + } + } + prog = ((float)uSrcPt/(float)pointList.size()*100.0f); + } + + + + + + for(size_t ui=0;ui. + */ + +#ifndef SPATIAL_H +#define SPATIAL_H + +#include "K3DTree.h" +#include "K3DTree-mk2.h" + + +//RDF error codes +enum +{ + RDF_ERR_NEGATIVE_SCALE_FACT=1, + RDF_ERR_INSUFFICIENT_INPUT_POINTS, + RDF_FILE_OPEN_FAIL, + RDF_ABORT_FAIL +}; + +//!Generate the NN histogram specified up to a given NN +unsigned int generateNNHist( const std::vector &pointList, + const K3DTree &tree,unsigned int nnMax, unsigned int numBins, + std::vector > &histogram, float *binWidth, + unsigned int *progressPtr,ATOMIC_BOOL &wantAbort); + +//!Generate an NN histogram using distance max cutoffs. Input histogram must be zeroed, +//if a voxelsname is given, a 3D RDF will be recorded. in this case voxelBins must be nonzero +unsigned int generateDistHist(const std::vector &pointList, const K3DTree &tree, + unsigned int *histogram, float distMax, + unsigned int numBins, unsigned int &warnBiasCount, + unsigned int *progressPtr,ATOMIC_BOOL &wantAbort); + +//!Returns a subset of points guaranteed to lie at least reductionDim inside hull of input points +/*! Calculates the hull of the input ions and then scales the hull such that the + * smallest distance between the scaled hull and the original hull is exactly + * reductionDim + */ +unsigned int GetReducedHullPts(const std::vector &pts, float reductionDim, + unsigned int *progress, ATOMIC_BOOL &wantAbort, std::vector &returnIons ); + + +//Return a 1D histogram of NN frequencies, by projecting the NNs within a given search onto a specified axis, stopping at some fixed sstance +// radius onto a specified vector prior to histogram summation. +// - axisDir must be normalised. +unsigned int generate1DAxialDistHist(const std::vector &pointList, const K3DTreeMk2 &tree, + const Point3D &axisDir, unsigned int *histogram, float distMax, unsigned int numBins, + unsigned int *progressPtr, ATOMIC_BOOL &wantAbort); + + +//Generate a 1D distribution of NN distances s projected onto a specified axis +// Inputs are the axis to project onto, a prezeroed 1D histogram array (size numBIns), +// and the input data points (search src) and tree (search target) +// Outputs are the histogram values , and the bin width for the histogram +unsigned int generate1DAxialNNHist(const std::vector &pointList, const K3DTreeMk2 &tree, + const Point3D &axisDir, unsigned int *histogram, + float &binWidth, unsigned int nnMax, unsigned int numBins, + unsigned int *progressPtr, ATOMIC_BOOL &wantAbort); + + +//generate the Knn probability distribution for a given nn occurring at a radius in 3D space +// with a fixed density parameter. Radii are the positions to evaluate the distribution +// nnDist will store the answer. It is required that both density >=0 and nn >0. +void generateKnnTheoreticalDist(const std::vector &radii, float density, unsigned int nn, + std::vector &nnDist); + +//Generate a series of 1D distribution functions, using a stepped spherical coordinates in equal delta-Theta, delta-Phi increments +unsigned int generate1DAxialDistHistSweep(const std::vector &pointList, K3DTreeMk2 &tree, + float distMax, float dTheta, float dPhi, unsigned int &prog, + std::vector > > &histogram); +#endif diff -Nru 3depict-0.0.19-1/src/backend/filters/annotation.cpp 3depict-0.0.20/src/backend/filters/annotation.cpp --- 3depict-0.0.19-1/src/backend/filters/annotation.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/annotation.cpp 2016-10-29 20:37:05.000000000 +0000 @@ -167,8 +167,15 @@ //If we are not enabled, do not draw anything into the output if(!active) + { + progress.filterProgress=100; return 0; + } + progress.step=1; + progress.maxStep=1; + progress.stepName=TRANS("Draw"); + DrawStreamData *d; d = new DrawStreamData; d->parent=this; @@ -505,6 +512,7 @@ d->cached=0; getOut.push_back(d); + progress.filterProgress=100; return 0; } diff -Nru 3depict-0.0.19-1/src/backend/filters/boundingBox.cpp 3depict-0.0.20/src/backend/filters/boundingBox.cpp --- 3depict-0.0.19-1/src/backend/filters/boundingBox.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/boundingBox.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -103,6 +103,7 @@ p->threeDText=threeDText; p->lineWidth=lineWidth; + p->lineColour=lineColour; p->fontSize=fontSize; //We are copying whether to cache or not, @@ -510,7 +511,6 @@ } #endif bTotal.expand(bThis); - progress.filterProgress=100; break; } default: @@ -521,6 +521,7 @@ getOut.push_back(dataIn[ui]); } + progress.filterProgress=100; //Append the bounding box if it is valid if(bTotal.isValid()) { @@ -800,8 +801,9 @@ return false; - if(lineColour.toColourRGBA() != newLineColour) - needUpdate=true; + if(lineColour.toColourRGBA() == newLineColour) + return false; + lineColour=newLineColour.toRGBAf(); needUpdate=true; diff -Nru 3depict-0.0.19-1/src/backend/filters/clusterAnalysis.cpp 3depict-0.0.20/src/backend/filters/clusterAnalysis.cpp --- 3depict-0.0.19-1/src/backend/filters/clusterAnalysis.cpp 2016-05-30 23:57:56.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/clusterAnalysis.cpp 2017-01-21 12:05:42.000000000 +0000 @@ -685,7 +685,7 @@ Plot2DStreamData *p = new Plot2DStreamData; p->parent=this; - p->plotType=PLOT_2D_SCATTER; + p->plotStyle=PLOT_2D_SCATTER; p->dataLabel=TRANS("Morphology Plot"); p->xLabel=TRANS("\\lambda_1:\\lambda_2 ratio"); p->yLabel=TRANS("\\lambda_2:\\lambda_3 ratio"); @@ -1145,8 +1145,7 @@ { p.name=TRANS("Enable/Disable All"); - bool allEnabled=false; - allEnabled=(std::find(ionBulkEnabled.begin(),ionBulkEnabled.end(),false) == ionBulkEnabled.end()); + bool allEnabled=(std::find(ionBulkEnabled.begin(),ionBulkEnabled.end(),false) == ionBulkEnabled.end()); p.data=boolStrEnc(allEnabled); p.type=PROPERTY_TYPE_BOOL; p.helpText=TRANS("Enable/disable all ions"); diff -Nru 3depict-0.0.19-1/src/backend/filters/dataLoad.cpp 3depict-0.0.20/src/backend/filters/dataLoad.cpp --- 3depict-0.0.19-1/src/backend/filters/dataLoad.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/dataLoad.cpp 2017-01-14 09:49:17.000000000 +0000 @@ -26,6 +26,7 @@ #include "backend/APT/APTFileIO.h" +#include "backend/APT/3DapReader.h" using std::string; using std::pair; @@ -47,6 +48,8 @@ FILEDATA_TYPE_POS, FILEDATA_TYPE_TEXT, FILEDATA_TYPE_ATO, + FILEDATA_TYPE_TAPSIM, + FILEDATA_TYPE_3DAP_OPS, FILEDATA_TYPE_ENUM_END, // Not a data type, just end of enum }; @@ -66,6 +69,8 @@ const char *AVAILABLE_FILEDATA_TYPES[] = { NTRANS("POS Data"), NTRANS("Text Data"), NTRANS("ATO Data"), + NTRANS("Tapsim Data"), + NTRANS("3Dap/Posap OPS Data"), }; const char *DEFAULT_LABEL="Mass-to-Charge (Da/e)"; @@ -86,6 +91,15 @@ index[i] = i; } + //Disable TOF distortion + reconParams.useTOFDistortion=0; + //Use a 50nm radius cylinder by default + reconParams.radiusCylinder=50; + + //Atomic volume of Al atom, in nm^3, including packing factor + reconParams.ionVolume= 0.0165418128; + reconParams.detectionEfficiency= 0.4; + } Filter *DataLoadFilter::cloneUncached() const @@ -113,6 +127,7 @@ p->cacheOK=false; p->enabled=enabled; p->userString=userString; + p->reconParams=reconParams; p->wantMonitor=wantMonitor; p->numColumns=numColumns; @@ -135,6 +150,9 @@ case DATALOAD_LAWATAP_ATO_FILE: fileType=FILEDATA_TYPE_ATO; break; + case DATALOAD_THREEDAP_OPS_FILE: + fileType=FILEDATA_TYPE_3DAP_OPS; + break; default: ASSERT(false); } @@ -429,6 +447,45 @@ break; } + case FILEDATA_TYPE_TAPSIM: + { + //TODO: Load tapsim file with sampling + //Load the file + if((uiErr = loadTapsimBinFile(ionFilename.c_str(), + progress.filterProgress,(*Filter::wantAbort),ionData->data))) + + { + consoleOutput.push_back(string(TRANS("Error loading file: ")) + ionFilename); + delete ionData; + errStr=TRANS(TAPSIM_ERR_STRINGS[uiErr]); + return uiErr; + } + + + std::string tmpSize; + stream_cast(tmpSize,ionData->data.size()); + consoleOutput.push_back(string(TRANS("Loaded dataset, " )) + tmpSize + + string(TRANS(" points."))); + + break; + } + case FILEDATA_TYPE_3DAP_OPS: + { + if( (uiErr = reconstruct3DapData(ionFilename.c_str(), reconParams, progress.filterProgress,(*Filter::wantAbort), ionData->data)) ) + { + consoleOutput.push_back(string(TRANS("Error loading file: ")) + ionFilename); + delete ionData; + errStr=TRANS(OPS_ENUM_ERRSTRINGS[uiErr]); + return uiErr; + + } + + std::string tmpSize; + stream_cast(tmpSize,ionData->data.size()); + consoleOutput.push_back(string(TRANS("Loaded dataset, " )) + tmpSize + + string(TRANS(" points."))); + break; + } default: ASSERT(false); } @@ -485,7 +542,7 @@ p.helpText=TRANS("File from which to load data"); p.data=ionFilename; //Wx- acceptable string format - p.dataSecondary = TRANS("Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)|*.xml;*.pos;*.txt;*.csv;*.ato|All Files|*") ; + p.dataSecondary = TRANS("Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)|*.xml;*.pos;*.txt;*.csv;*.ato;*.ops|All Files|*") ; propertyList.addProperty(p,curGroup); @@ -518,6 +575,44 @@ p.key=DATALOAD_KEY_NUMBER_OF_COLUMNS; p.type=PROPERTY_TYPE_INTEGER; propertyList.addProperty(p,curGroup); + choices.clear(); + for (unsigned int i = 0; i < numColumns; i++) { + string tmp; + stream_cast(tmp,i); + choices.push_back(make_pair(i,tmp)); + } + + colStr= choiceString(choices,index[0]); + p.name="X"; + p.data=colStr; + p.key=DATALOAD_KEY_SELECTED_COLUMN0; + p.type=PROPERTY_TYPE_CHOICE; + p.helpText=TRANS("Relative offset of each entry in file for point's X position"); + propertyList.addProperty(p,curGroup); + + colStr= choiceString(choices,index[1]); + p.name="Y"; + p.data=colStr; + p.key=DATALOAD_KEY_SELECTED_COLUMN1; + p.type=PROPERTY_TYPE_CHOICE; + p.helpText=TRANS("Relative offset of each entry in file for point's Y position"); + propertyList.addProperty(p,curGroup); + + colStr= choiceString(choices,index[2]); + p.name="Z"; + p.data=colStr; + p.key=DATALOAD_KEY_SELECTED_COLUMN2; + p.type=PROPERTY_TYPE_CHOICE; + p.helpText=TRANS("Relative offset of each entry in file for point's Z position"); + propertyList.addProperty(p,curGroup); + + colStr= choiceString(choices,index[3]); + p.name=TRANS("Value"); + p.data=colStr; + p.key=DATALOAD_KEY_SELECTED_COLUMN3; + p.type=PROPERTY_TYPE_CHOICE; + p.helpText=TRANS("Relative offset of each entry in file to use for scalar value of 3D point"); + propertyList.addProperty(p,curGroup); break; } case FILEDATA_TYPE_TEXT: @@ -541,49 +636,43 @@ break; } + case FILEDATA_TYPE_3DAP_OPS: + { + string s; + stream_cast(s,reconParams.radiusCylinder); + p.name=TRANS("Recon. Width"); + p.helpText=TRANS("Width of box onto which to place reconstructed detector hits (similar to tip radius)"); + p.data=s; + p.key=DATALOAD_KEY_SCALERADIUS; + p.type=PROPERTY_TYPE_REAL; + + propertyList.addProperty(p,curGroup); + + + stream_cast(s,reconParams.ionVolume); + p.name=TRANS("Ion Volume"); + p.helpText=TRANS("Effective volume of an ion (incl. free packing volume)"); + p.data=s; + p.key=DATALOAD_KEY_IONVOLUME; + p.type=PROPERTY_TYPE_REAL; + + propertyList.addProperty(p,curGroup); + + stream_cast(s,reconParams.detectionEfficiency); + p.name=TRANS("Det. Efficiency"); + p.helpText=TRANS("Effiency of system (ions evaporated towards detector/ions detected by detector)"); + p.data=s; + p.key=DATALOAD_KEY_DETECTIONEFFICIENCY; + p.type=PROPERTY_TYPE_REAL; + + propertyList.addProperty(p,curGroup); + break; + } default: ASSERT(false); } - choices.clear(); - for (unsigned int i = 0; i < numColumns; i++) { - string tmp; - stream_cast(tmp,i); - choices.push_back(make_pair(i,tmp)); - } - - colStr= choiceString(choices,index[0]); - p.name="X"; - p.data=colStr; - p.key=DATALOAD_KEY_SELECTED_COLUMN0; - p.type=PROPERTY_TYPE_CHOICE; - p.helpText=TRANS("Relative offset of each entry in file for point's X position"); - propertyList.addProperty(p,curGroup); - - colStr= choiceString(choices,index[1]); - p.name="Y"; - p.data=colStr; - p.key=DATALOAD_KEY_SELECTED_COLUMN1; - p.type=PROPERTY_TYPE_CHOICE; - p.helpText=TRANS("Relative offset of each entry in file for point's Y position"); - propertyList.addProperty(p,curGroup); - - colStr= choiceString(choices,index[2]); - p.name="Z"; - p.data=colStr; - p.key=DATALOAD_KEY_SELECTED_COLUMN2; - p.type=PROPERTY_TYPE_CHOICE; - p.helpText=TRANS("Relative offset of each entry in file for point's Z position"); - propertyList.addProperty(p,curGroup); - - colStr= choiceString(choices,index[3]); - p.name=TRANS("Value"); - p.data=colStr; - p.key=DATALOAD_KEY_SELECTED_COLUMN3; - p.type=PROPERTY_TYPE_CHOICE; - p.helpText=TRANS("Relative offset of each entry in file to use for scalar value of 3D point"); - propertyList.addProperty(p,curGroup); p.name=TRANS("Value Label"); p.data=valueLabel; @@ -610,7 +699,7 @@ std::string tmpStr; //FIXME: ATO Files need an implementation of sampling read - if(fileType!=FILEDATA_TYPE_ATO) + if(fileType==FILEDATA_TYPE_POS) { stream_cast(tmpStr,doSample); p.name=TRANS("Sample data"); @@ -943,6 +1032,64 @@ needUpdate=true; break; } + + case DATALOAD_KEY_SCALERADIUS: + { + float ltmp; + if(stream_cast(ltmp,value)) + return false; + + if(ltmp < 0) + return false; + + if(ltmp == reconParams.radiusCylinder) + break; + + reconParams.radiusCylinder=ltmp; + + needUpdate=true; + clearCache(); + + break; + } + case DATALOAD_KEY_IONVOLUME: + { + float ltmp; + if(stream_cast(ltmp,value)) + return false; + + if(ltmp < 0) + return false; + + if(ltmp == reconParams.ionVolume) + break; + + reconParams.ionVolume=ltmp; + + needUpdate=true; + clearCache(); + + break; + } + case DATALOAD_KEY_DETECTIONEFFICIENCY: + { + float ltmp; + if(stream_cast(ltmp,value)) + return false; + + if(ltmp < 0) + return false; + + if(ltmp == reconParams.detectionEfficiency) + break; + + reconParams.detectionEfficiency=ltmp; + + needUpdate=true; + clearCache(); + + break; + } default: ASSERT(false); break; @@ -991,12 +1138,7 @@ fileType=FILEDATA_TYPE_POS; - //Override the string, as needed - if( (stateFileDir.size()) && - (ionFilename.size() > 2 && ionFilename.substr(0,2) == "./") ) - { - ionFilename=stateFileDir + ionFilename.substr(2); - } + convertFileStringToAbsolute(stateFileDir, ionFilename); //Filenames need to be converted from unix format (which I make canonical on disk) into native format ionFilename=convertFileStringToNative(ionFilename); @@ -1174,6 +1316,7 @@ f << tabs(depth+1) << "" <" << endl; + f << tabs(depth+1) << "" << endl; f << tabs(depth) << "" << endl; break; } diff -Nru 3depict-0.0.19-1/src/backend/filters/dataLoad.h 3depict-0.0.20/src/backend/filters/dataLoad.h --- 3depict-0.0.19-1/src/backend/filters/dataLoad.h 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/dataLoad.h 2017-01-14 09:49:17.000000000 +0000 @@ -23,11 +23,15 @@ #include "../../common/basics.h" #include "../../common/translation.h" +//TODO: Remove me? +#include "backend/APT/3DapReader.h" + enum { DATALOAD_FLOAT_FILE, DATALOAD_TEXT_FILE, - DATALOAD_LAWATAP_ATO_FILE + DATALOAD_LAWATAP_ATO_FILE, + DATALOAD_THREEDAP_OPS_FILE }; enum @@ -46,6 +50,9 @@ DATALOAD_KEY_SELECTED_COLUMN3, DATALOAD_KEY_NUMBER_OF_COLUMNS, DATALOAD_KEY_ENDIANNESS, + DATALOAD_KEY_SCALERADIUS, + DATALOAD_KEY_IONVOLUME, + DATALOAD_KEY_DETECTIONEFFICIENCY, DATALOAD_KEY_MONITOR }; @@ -87,6 +94,9 @@ //!volume restriction bounds, not sorted BoundCube bound; + + //!Reconstruction parameters for OPS files + THREEDAP_RECON_PARAMS reconParams; //Epoch timestamp for the mointored file. -1 if invalid time_t monitorTimestamp; diff -Nru 3depict-0.0.19-1/src/backend/filters/externalProgram.cpp 3depict-0.0.20/src/backend/filters/externalProgram.cpp --- 3depict-0.0.19-1/src/backend/filters/externalProgram.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/externalProgram.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -905,16 +905,16 @@ plotNames.push_back("some Plot.xy"); ionNames.push_back("my \"pos file.pos"); - string commandLine; - commandLine="echo \"My ions are \'%i\'\""; + string myCommandLine; + myCommandLine="echo \"My ions are \'%i\'\""; string resultString; - TEST(!substituteVariables(commandLine,ionNames,plotNames,resultString),"substitution fail"); + TEST(!substituteVariables(myCommandLine,ionNames,plotNames,resultString),"substitution fail"); TEST(resultString == "echo \"My ions are \'my \"pos file.pos\'\"","substitution fail"); - commandLine=" echo (\"%i\")"; - TEST(!substituteVariables(commandLine,ionNames,plotNames,resultString),"substitution fail"); + myCommandLine=" echo (\"%i\")"; + TEST(!substituteVariables(myCommandLine,ionNames,plotNames,resultString),"substitution fail"); TEST(resultString == " echo (\"my \"pos file.pos\")","substitution fail"); diff -Nru 3depict-0.0.19-1/src/backend/filters/filterCommon.cpp 3depict-0.0.20/src/backend/filters/filterCommon.cpp --- 3depict-0.0.19-1/src/backend/filters/filterCommon.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/filterCommon.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -235,43 +235,15 @@ ASSERT(false); } -unsigned int getIonstreamIonID(const IonStreamData *d, const RangeFile *r) +size_t getTotalSizeByType(const std::vector &dataIn, unsigned int streamTypeMask) { - if(d->data.empty()) - return (unsigned int)-1; - - unsigned int tentativeRange; - - tentativeRange=r->getIonID(d->data[0].getMassToCharge()); - - - //TODO: Currently, we have no choice but to brute force it. - //In the future, it might be worth storing some data inside the IonStreamData itself - //and to use that first, rather than try to brute force the result -#ifdef _OPENMP - bool spin=false; - #pragma omp parallel for shared(spin) - for(size_t ui=1;uidata.size();ui++) - { - if(spin) - continue; - if(r->getIonID(d->data[ui].getMassToCharge()) !=tentativeRange) - spin=true; - } - - //Not a range - if(spin) - return (unsigned int)-1; - -#else - for(size_t ui=1;uidata.size();ui++) + size_t totalSize=0; + for (size_t i = 0; i < dataIn.size(); i++) { - if(r->getIonID(d->data[ui].getMassToCharge()) !=tentativeRange) - return (unsigned int)-1; + if(dataIn[i]->getStreamType() & streamTypeMask) + totalSize+=dataIn[i]->getNumBasicObjects(); } -#endif - - return tentativeRange; + return totalSize; } @@ -591,13 +563,16 @@ args=argsOptions[1]; - qh_new_qhull( dim, + if(qh_new_qhull( dim, bufferSize, buffer, false, (char *)args , outSquelch, //QHULL's interface is bizarre, no way to set null pointer in qhull 2012 - result is inf. loop in qhull_fprintf and error reporting func. - outSquelch); + outSquelch)) + { + return HULL_ERR_QHULL_NOINIT; + } qhullInited=true; if(outSquelch !=stderr) @@ -661,6 +636,184 @@ } +unsigned int do3DDelaunay(vector &pts, + vector &ta, vector &tb, vector &tc) +{ + + + + //Delaunay tesslation cannot be done + // piecewise, unlike hull. Ensure that + // we are not in the middle of a different + // calculation + ASSERT(!qhullInited); + + double *buffer = new double[pts.size()*3]; + unsigned int bufferSize = pts.size(); + for(unsigned int ui=0;ui=2012 has a "feature" where it won't accept null arguments for the output + // there is no clear way to shut it up. + FILE *outSquelch=0; +#if defined(__linux__) || defined(__APPLE__) || defined(__BSD__) + outSquelch=fopen("/dev/null","w"); +#elif defined(__win32__) || defined(__win64__) + outSquelch=fopen("NUL","w"); +#endif + + if(!outSquelch) + { + //Give up, just let qhull output random statistics to stderr + outSquelch=stderr; + } + + //Joggle the output, such that only simplical facets are generated, Also compute area/volume + const char *opts = "qhull d QbB Qz Qt"; + unsigned int isMalloc=0; + //FIXME: PVS complains that false here should be a + if(qh_new_qhull(dim, bufferSize, buffer, + isMalloc,(char*)opts,outSquelch,outSquelch)) + return HULL_ERR_QHULL_NOINIT; + + if(outSquelch !=stderr) + fclose(outSquelch); + + + facetT *facet; + vertexT *vertex, **vertexp; + + FORALLfacets + { + if(!facet->simplicial) + continue; +// if(facet->upperdelaunay) +// continue; + + unsigned int ui=0; + FOREACHvertex_(facet->vertices) + { + unsigned int id; + id= qh_pointid(vertex->point); + switch(ui) + { + case 0: + ta.push_back(id); + break; + case 1: + tb.push_back(id); + break; + case 2: + tc.push_back(id); + break; + } + ui++; + } + } + + + qh_freeqhull(!qh_ALL); + int curlong,totlong; + //This seems to be required? Cannot find any documentation on the difference + // between qh_freeqhull and qh_memfreeshort. qhull appears to leak when just using qh_freeqhull + qh_memfreeshort (&curlong, &totlong); + + delete[] buffer; + + return 0; +} + +unsigned int do2DDelaunay(double *bufXY, unsigned int n, + vector &ta, vector &tb, vector &tc) +{ + + //Delaunay tesslation cannot be done + // piecewise, unlike hull. Ensure that + // we are not in the middle of a different + // calculation + ASSERT(!qhullInited); + + const int dim=2; + //Now compute delaunay + //(result is stored in qh's globals :( ) + //note that the input is "joggled" to + //ensure simplicial facet generation + + //Qhull >=2012 has a "feature" where it won't accept null arguments for the output + // there is no clear way to shut it up. + FILE *outSquelch=0; +#if defined(__linux__) || defined(__APPLE__) || defined(__BSD__) + outSquelch=fopen("/dev/null","w"); +#elif defined(__win32__) || defined(__win64__) + outSquelch=fopen("NUL","w"); +#endif + + if(!outSquelch) + { + //Give up, just let qhull output random statistics to stderr + outSquelch=stderr; + } + + //Joggle the output, such that only simplical facets are generated, Also compute area/volume + const char *opts = "qhull d Qt"; + if(qh_new_qhull(dim, n,bufXY, + false,(char*)opts,outSquelch,outSquelch)) + return HULL_ERR_QHULL_NOINIT; + + if(outSquelch !=stderr) + fclose(outSquelch); + + + facetT *facet; + vertexT *vertex, **vertexp; + + FORALLfacets + { + if(!facet->simplicial) + continue; + if(facet->upperdelaunay) + continue; + + unsigned int ui; + unsigned int id[3]; + + ui=0; + FOREACHvertex_(facet->vertices) + { + id[ui]= qh_pointid(vertex->point); + ASSERT(id[ui] < n); + ui++; + } + + //Drop the facets formed by adding higher dimensional point + if(id[0] == n || id[1] == n || id[2] == n) + continue; + + ta.push_back(id[0]); + tb.push_back(id[1]); + tc.push_back(id[2]); + } + + + qh_freeqhull(!qh_ALL); + int curlong,totlong; + //This seems to be required? Cannot find any documentation on the difference + // between qh_freeqhull and qh_memfreeshort. qhull appears to leak when just using qh_freeqhull + qh_memfreeshort (&curlong, &totlong); + + return 0; +} + void freeConvexHull() { qh_freeqhull(qh_ALL); @@ -734,3 +887,71 @@ return stlStr(tmpFilename); } +#ifdef DEBUG +bool testDelaunay(); +bool testCommon() +{ + TEST(testDelaunay(),"delaunay test"); + + return true; +} + + +bool testDelaunay() +{ + vector p; + + p.push_back(Point3D(0,0,1)); + p.push_back(Point3D(1,0,1)); + p.push_back(Point3D(1,1,1)); + p.push_back(Point3D(0,0,0)); + p.push_back(Point3D(-1,2,2)); + + //just see if we can run the triangulation routine + // to retrieve the triangulations + vector tA,tB,tC; + TEST(do3DDelaunay(p,tA,tB,tC) ==0 , "Delaunay failed") + + //FIXME: Im not sure that qhull wont re-order the inputs. + // need to check this + // triangle vertex ids should all be the same size (one for each vertex) + TEST(tA.size() == tB.size(),"triangle id check"); + TEST(tB.size() == tC.size(),"triangle id check"); + + + p.clear(); + tA.clear(); + tB.clear(); + tC.clear(); + + //Perform 2D delaunay check + p.push_back(Point3D(0,1,0)); + p.push_back(Point3D(1,1,0)); + p.push_back(Point3D(1,0,0)); + p.push_back(Point3D(2,2,0)); + + + double *buffer = new double[p.size()*2]; + + for(unsigned int ui=0;ui &vectorParams, unsigned int depth); @@ -119,77 +123,8 @@ // is ranged tht way. Otherwise returns -1. unsigned int getIonstreamIonID(const IonStreamData *d, const RangeFile *r); -inline -void assignIonData(Point3D &p, const IonHit &h) -{ - p = h.getPosRef(); -} - -inline -void assignIonData(IonHit &p, const IonHit &h) -{ - p = h; -} - -//!Extend a point data vector using some ion data. -// Offset is the position to start inserting in the destination array. -// Will fail if user abort is detected -template -unsigned int extendDataVector(std::vector &dest, const std::vector &vIonData, - unsigned int &progress, size_t offset) -{ - unsigned int curProg=NUM_CALLBACK; - unsigned int n =offset; -#ifdef _OPENMP - //Parallel version - bool spin=false; - #pragma omp parallel for shared(spin) - for(size_t ui=0;ui &dataIn, unsigned int streamTypeMask); const RangeFile *getRangeFile(const std::vector &dataIn); @@ -212,4 +147,17 @@ // - note that any subdirs will be automatically created if needed. std::string createTmpFilename(const char *dir=NULL,const char *extension=NULL); +//Input buffer should be bufXY[ui*2 + offset] (X-> offset=0, Y->offset=1) +// n - number of input points +// output is the vertices of the triangulation +unsigned int do2DDelaunay(double *bufXY, unsigned int n, + std::vector &ta, std::vector &tb, std::vector &tc); + +#ifdef DEBUG + +//Test functions +bool testCommon(); + +#endif + #endif diff -Nru 3depict-0.0.19-1/src/backend/filters/ionColour.cpp 3depict-0.0.20/src/backend/filters/ionColour.cpp --- 3depict-0.0.19-1/src/backend/filters/ionColour.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/ionColour.cpp 2017-01-24 22:39:13.000000000 +0000 @@ -18,6 +18,8 @@ #include "ionColour.h" #include "filterCommon.h" +#include "../state.h" +#include "common/stringFuncs.h" #include "common/colourmap.h" @@ -37,6 +39,7 @@ KEY_IONCOLOURFILTER_REVERSE, KEY_IONCOLOURFILTER_SHOWBAR, KEY_IONCOLOURFILTER_ALPHA, + KEY_IONCOLOURFILTER_AUTOEXTREMA, }; enum @@ -44,11 +47,12 @@ IONCOLOUR_ABORT_ERR }; -IonColourFilter::IonColourFilter() : colourMap(0),reverseMap(false), +IonColourFilter::IonColourFilter() : colourMap(COLOURMAP_VIRIDIS),reverseMap(false), nColours(MAX_NUM_COLOURS),showColourBar(true), alpha(1.0f) { mapBounds[0] = 0.0f; mapBounds[1] = 100.0f; + autoExtrema=true; cacheOK=false; cache=true; //By default, we should cache, but decision is made higher up @@ -61,6 +65,7 @@ p->colourMap = colourMap; p->mapBounds[0]=mapBounds[0]; p->mapBounds[1]=mapBounds[1]; + p->autoExtrema=autoExtrema; p->nColours =nColours; p->alpha = alpha; p->showColourBar =showColourBar; @@ -76,7 +81,7 @@ size_t IonColourFilter::numBytesForCache(size_t nObjects) const { - return (size_t)((float)(nObjects*IONDATA_SIZE)); + return (size_t)((float)(nObjects*IONDATA_SIZE)); } @@ -116,6 +121,34 @@ } + size_t totalSize=numElements(dataIn,STREAM_TYPE_IONS); + if(autoExtrema) + { + mapBounds[0]= std::numeric_limits::max(); + mapBounds[1]=-std::numeric_limits::max(); + + + for(unsigned int ui=0;uigetStreamType() == STREAM_TYPE_IONS) + { + IonStreamData *ions; + ions = (IonStreamData *)dataIn[ui]; + for(unsigned int uj=0;ujdata.size(); uj++) + { + mapBounds[0] = std::min(mapBounds[0], + ions->data[uj].getMassToCharge()); + mapBounds[1] = std::max(mapBounds[1], + ions->data[uj].getMassToCharge()); + + } + + } + + } + } //Try to maintain ion size if possible bool haveIonSize,sameSize; // have we set the ionSize? @@ -125,7 +158,6 @@ //Did we find any ions in this pass? bool foundIons=false; - unsigned int totalSize=numElements(dataIn); unsigned int curProg=NUM_CALLBACK; size_t n=0; for(unsigned int ui=0;ui=NUM_COLOURMAPS || tmpMap ==colourMap) + if(tmpMap >=COLOURMAP_ENUM_END || tmpMap ==colourMap) return false; clearCache(); @@ -398,6 +441,12 @@ return false; break; } + case KEY_IONCOLOURFILTER_AUTOEXTREMA: + { + if(!applyPropertyNow(autoExtrema,value,needUpdate)) + return false; + break; + } default: ASSERT(false); } @@ -427,7 +476,7 @@ f << tabs(depth+1) << "" << endl; f << tabs(depth+1) << "" << endl; - f << tabs(depth+1) << "" << endl; f << tabs(depth+1) << "" << endl; @@ -474,7 +523,13 @@ if(stream_cast(colourMap,tmpStr)) return false; - if(colourMap>= NUM_COLOURMAPS) + //We defaulted to Jet prior to version 0.0.20, and did not store + // the colour map data properly, so it loaded as jet + if( AnalysisState::getStateWriterVersion() < getVersionNumber(0,0,20) && colourMap == 0) + colourMap=COLOURMAP_JET; + + + if(colourMap>= COLOURMAP_ENUM_END) return false; xmlFree(xmlString); @@ -495,6 +550,18 @@ if(XMLHelpFwdToElem(nodePtr,"extrema")) return false; + if(XMLHelpGetProp(autoExtrema,nodePtr,"auto")) + { + if(AnalysisState::getStateWriterVersion() <=19) + { + //DEPRECATE ME + //This property did not exist prior to 0.0.20 + autoExtrema=false; + } + else + autoExtrema=true; + } + xmlString=xmlGetProp(nodePtr,(const xmlChar *)"min"); if(!xmlString) return false; @@ -637,7 +704,7 @@ delete f; delete d; - TEST(streamOut.size() == 99,"stream count"); + TEST(streamOut.size() == 100,"stream count"); for(unsigned int ui=0;uirangeFile->getNumIons()) + if(ionFractions.size() != c->rangeFile->getNumIons()+1) { //set up some defaults; seeded from normal ionFractions.resize(c->rangeFile->getNumIons()+1,fraction); @@ -182,6 +182,7 @@ { propagateStreams(dataIn,getOut,STREAM_TYPE_IONS,true); propagateCache(getOut); + progress.filterProgress=100; return 0; } @@ -464,7 +465,8 @@ propertyList.setGroupTitle(curGroup,TRANS("Mode")); curGroup++; - if(rsdIncoming && perSpecies) + + if(rsdIncoming && perSpecies && rsdIncoming->enabledIons.size()) { unsigned int typeVal; if(fixedNumOut) diff -Nru 3depict-0.0.19-1/src/backend/filters/ionInfo.cpp 3depict-0.0.20/src/backend/filters/ionInfo.cpp --- 3depict-0.0.19-1/src/backend/filters/ionInfo.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/ionInfo.cpp 2017-01-21 11:37:17.000000000 +0000 @@ -398,7 +398,7 @@ //"Pairwise events" - where we perform an action if both - //These + //these are set if(wantIonCounts && wantVolume) { if(computedVol > sqrtf(std::numeric_limits::epsilon())) @@ -420,6 +420,9 @@ } } + + progress.filterProgress=100; + return 0; } diff -Nru 3depict-0.0.19-1/src/backend/filters/profile.cpp 3depict-0.0.20/src/backend/filters/profile.cpp --- 3depict-0.0.19-1/src/backend/filters/profile.cpp 2016-05-30 23:56:54.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/profile.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -328,26 +328,30 @@ vector > ionFrequencies; RangeStreamData *rngData=0; - for(unsigned int ui=0;uigetStreamType() == STREAM_TYPE_RANGE) + for(unsigned int ui=0;uigetStreamType() == STREAM_TYPE_RANGE) + { + rngData =((RangeStreamData *)dataIn[ui]); + break; + } } } - unsigned int numBins, errCode; + unsigned int numBins; { + unsigned int errCode; float length; errCode=getBinData(numBins,length); if(!numBins) return 0; - } if(errCode) return errCode; + } //Indirection vector to convert ionFrequencies position to ionID mapping. //Should only be used in conjunction with rngData == true @@ -1298,7 +1302,7 @@ f << tabs(depth+1) << "" << endl; for(unsigned int ui=0; ui" << endl; + f << tabs(depth+2) << "" << endl; f << tabs(depth+1) << "" << endl; f << tabs(depth+1) << "" << endl; diff -Nru 3depict-0.0.19-1/src/backend/filters/rangeFile.cpp 3depict-0.0.20/src/backend/filters/rangeFile.cpp --- 3depict-0.0.19-1/src/backend/filters/rangeFile.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/rangeFile.cpp 2017-01-27 00:15:49.000000000 +0000 @@ -113,6 +113,7 @@ //these. propagateStreams(dataIn,getOut,getRefreshBlockMask(),true); + progress.filterProgress=100; return 0; } @@ -1125,13 +1126,8 @@ rngName=(char *)xmlString; xmlFree(xmlString); - //Override the string to strip leading ./ notation, as needed - if( (stateFileDir.size()) && - (rngName.size() > 2 && rngName.substr(0,2) == "./") ) - { - rngName=stateFileDir + rngName.substr(2); - } + convertFileStringToAbsolute(stateFileDir,rngName); rngName=convertFileStringToNative(rngName); //try using the extension name of the file to guess format diff -Nru 3depict-0.0.19-1/src/backend/filters/spatialAnalysis.cpp 3depict-0.0.20/src/backend/filters/spatialAnalysis.cpp --- 3depict-0.0.19-1/src/backend/filters/spatialAnalysis.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/spatialAnalysis.cpp 2017-01-21 12:06:44.000000000 +0000 @@ -21,7 +21,7 @@ -#include "algorithms/rdf.h" +#include "algorithms/spatial.h" #include "geometryHelpers.h" #include "filterCommon.h" #include "algorithms/binomial.h" @@ -86,7 +86,7 @@ ALGORITHM_AXIAL_DF, //Axial Distribution Function (aka atomvicinity, sdm, 1D rdf) ALGORITHM_BINOMIAL, //Binomial block method for statistical randomness testing ALGORITHM_REPLACE, //Remove, set or modify points using an external file - ALGORITHM_LOCAL_CONCENTRATION, //Obtain a local concentration plot, as described by Hyde and Marquis (TODO : REF) + ALGORITHM_LOCAL_CHEMISTRY, //Obtain a local chemistry plot, as described by Hyde and Marquis (10.1016/j.mser.2010.05.001) ALGORITHM_ENUM_END, }; @@ -126,7 +126,7 @@ NTRANS("Axial Distribution"), NTRANS("Binomial Distribution"), NTRANS("Point Em/Replacement"), - NTRANS("Local Concentration"), + NTRANS("Local Chemistry"), }; const char *STOP_MODES[] = { @@ -134,7 +134,7 @@ NTRANS("Radius") }; -//User viisble names for the replace sub-algorithms +//User visible names for the replace sub-algorithms const char *REPLACE_ALGORITHMS[] = { "Subtract", "Intersect", "Union", @@ -183,136 +183,6 @@ //Scan input datastreams to build two point vectors, // one of those with points specified as "target" // which is a copy of the input points -//Returns 0 on no error, otherwise nonzero -template -size_t buildSplitPoints(const vector &dataIn, - ProgressData &progress, size_t totalDataSize, - const RangeFile *rngF, const vector &pSourceEnabled, const vector &pTargetEnabled, - vector &pSource, vector &pTarget - ) -{ - size_t sizeNeeded[2]; - sizeNeeded[0]=sizeNeeded[1]=0; - - //Presize arrays - for(unsigned int ui=0; uigetStreamType()) - { - case STREAM_TYPE_IONS: - { - unsigned int ionID; - - const IonStreamData *d; - d=((const IonStreamData *)dataIn[ui]); - ionID=getIonstreamIonID(d,rngF); - - if(ionID == (unsigned int)-1) - { - - //we have ungrouped ions, so work out size individually - for(unsigned int uj=0;ujdata.size();uj++) - { - ionID = rngF->getIonID(d->data[uj].getMassToCharge()); - - if(ionID == (unsigned int)-1) - continue; - - if(pSourceEnabled[ionID]) - sizeNeeded[0]++; - if(pTargetEnabled[ionID]) - sizeNeeded[1]++; - } - - break; - } - - if(pSourceEnabled[ionID]) - sizeNeeded[0]+=d->data.size(); - - if(pTargetEnabled[ionID]) - sizeNeeded[1]+=d->data.size(); - - break; - } - default: - break; - } - } - - pSource.resize(sizeNeeded[0]); - pTarget.resize(sizeNeeded[1]); - - //Fill arrays - size_t curPos[2]; - curPos[0]=curPos[1]=0; - - for(unsigned int ui=0; uigetStreamType()) - { - case STREAM_TYPE_IONS: - { - unsigned int ionID; - const IonStreamData *d; - d=((const IonStreamData *)dataIn[ui]); - ionID=getIonstreamIonID(d,rngF); - - if(ionID==(unsigned int)(-1)) - { - //we have ungrouped ions, so work out size individually - for(unsigned int uj=0;ujdata.size();uj++) - { - ionID = rngF->getIonID(d->data[uj].getMassToCharge()); - - if(ionID == (unsigned int)-1) - continue; - - if(pSourceEnabled[ionID]) - { - assignIonData(pSource[curPos[0]],d->data[uj]); - curPos[0]++; - } - - if(pTargetEnabled[ionID]) - { - assignIonData(pTarget[curPos[1]],d->data[uj]); - curPos[1]++; - } - } - - break; - } - - unsigned int dummyProgress=0; - if(pSourceEnabled[ionID]) - { - if(extendDataVector(pSource,d->data, - dummyProgress,curPos[0])) - return ERR_ABORT_FAIL; - - curPos[0]+=d->data.size(); - } - - if(pTargetEnabled[ionID]) - { - if(extendDataVector(pTarget,d->data, - dummyProgress,curPos[1])) - return ERR_ABORT_FAIL; - - curPos[1]+=d->data.size(); - } - - break; - } - default: - break; - } - } - - - return 0; -} SpatialAnalysisFilter::SpatialAnalysisFilter() { @@ -497,32 +367,6 @@ } -void SpatialAnalysisFilter::createDevice(vector &getOut) -{ - //Create the user interaction device required for the user - // to interact with the algorithm parameters - SelectionDevice *s=0; - DrawStreamData *d= new DrawStreamData; - d->parent=this; - d->cached=0; - - switch(algorithm) - { - case ALGORITHM_AXIAL_DF: - createCylinder(d,s); - break; - default: - ; - } - - if(s) - { - devices.push_back(s); - getOut.push_back(d); - } - else - delete d; -} unsigned int SpatialAnalysisFilter::refresh(const std::vector &dataIn, std::vector &getOut, ProgressData &progress) @@ -535,9 +379,6 @@ mask|=STREAM_TYPE_RANGE; - //create selection device for this algrithm - createDevice(getOut); - //Propagate input streams as desired propagateStreams(dataIn,getOut,mask,true); @@ -604,7 +445,7 @@ if(!rngF) return ERR_NO_RANGE; - result=algorithmBinomial(progress,totalDataSize, + result=algorithmBinomial(progress,totalDataSize, dataIn,getOut,rngF); break; } @@ -612,7 +453,7 @@ result=algorithmReplace(progress,totalDataSize, dataIn,getOut); break; - case ALGORITHM_LOCAL_CONCENTRATION: + case ALGORITHM_LOCAL_CHEMISTRY: if(!rngF) return ERR_NO_RANGE; result=algorithmLocalConcentration(progress,totalDataSize, @@ -655,115 +496,181 @@ return ERR_FILE_READ_FAIL; + vector outIons; + if(inIons.empty() || fileIons.empty()) + { + //Performance increase if we have an empty item. + // - in this case we can swap sets around + switch(replaceMode) + { + case REPLACE_MODE_UNION: + { + //If the local data is empty, then the union is just the "b" data (swap). + // if nonempty, then it is simply the "a" data + if(inIons.empty()) + outIons.swap(fileIons); + else + outIons.swap(inIons); + break; + } + case REPLACE_MODE_SUBTRACT: + { + //if either localdata OR bdata is empty, then we don't need to do anything. + // either way, input stays as it is + outIons.swap(inIons); + break; + } + case REPLACE_MODE_INTERSECT: + { + //intersection with empty set is empty set. + // might as well clear the ions incoming + inIons.clear(); + break; + } + default: + ASSERT(false); + + } + } + else + { - progress.step=3; - progress.stepName=TRANS("Build"); - progress.filterProgress=0; + progress.step=3; + progress.stepName=TRANS("Build"); + progress.filterProgress=0; - //Build the search tree we will use to perform replacement - K3DTreeMk2 tree; - tree.resetPts(fileIons,false); - if(!tree.build()) - return ERR_ABORT_FAIL; - BoundCube b; - tree.getBoundCube(b); + //TODO: Possible speed increase by finding the smaller of + // the two inputs, and using that to build the tree - //map the offset of the nearest to - //the tree ID - vector nearestVec; - nearestVec.resize(inIons.size()); + //Build the search tree we will use to perform replacement + K3DTreeMk2 tree; + // reset the tree points, without deleting the fileIOns + tree.resetPts(fileIons,false); + if(!tree.build()) + return ERR_ABORT_FAIL; + BoundCube b; + tree.getBoundCube(b); - //TODO: pair vector might be faster - // as we can use it in sequence, and can use openmp - map matchedMap; + //map the offset of the nearest to + //the tree ID + vector nearestVec; + nearestVec.resize(inIons.size()); - //Find the nearest point for all points in the dataset + //TODO: pair vector might be faster + // as we can use it in sequence, and can use openmp + map matchedMap; - #pragma omp parallel for - for(size_t ui=0;ui outIons; - switch(replaceMode) - { - case REPLACE_MODE_SUBTRACT: + //now we have a map that matches as so: + // map ( "inIon" ID -> "fileIon" ID) + // inIon should be our "A" in "A operator B" + switch(replaceMode) { - //In subtraction mode, we should have - // at least this many ions - if(inIons.size() > matchedMap.size()) - outIons.reserve(inIons.size()-matchedMap.size()); - - // - #pragma omp parallel for - for(unsigned int ui=0;ui::iterator it; - it=matchedMap.find(ui); - if(it != matchedMap.end()) - continue; + case REPLACE_MODE_SUBTRACT: + { + //If no matches, A-0 = A. Just return input + if(matchedMap.empty()) + { + outIons.swap(inIons); + break; + } + //In subtraction mode, we should have + // at least this many ions + if(inIons.size() > matchedMap.size()) + outIons.reserve(inIons.size()-matchedMap.size()); + + // + #pragma omp parallel for + for(unsigned int ui=0;ui::iterator it; + it=matchedMap.find(ui); + if(it != matchedMap.end()) + continue; - #pragma omp critical - outIons.push_back(inIons[ui]); + #pragma omp critical + outIons.push_back(inIons[ui]); + } + break; } - break; - } - case REPLACE_MODE_INTERSECT: - { - outIons.reserve(matchedMap.size()); - - if(replaceMass) + case REPLACE_MODE_INTERSECT: { - for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) + //Finish if no matches + if(matchedMap.empty()) + break; + + outIons.reserve(matchedMap.size()); + + if(replaceMass) + { + for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) + { + outIons.push_back(fileIons[it->second]); + ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); + } + } + else { - outIons.push_back(fileIons[it->second]); - ASSERT(fileIons[it->second].getPosRef().sqrDist(inIons[it->first].getPosRef()) < sqrReplaceTol); + for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) + { + outIons.push_back(inIons[it->first]); + } } + break; } - else + case REPLACE_MODE_UNION: { - for(map::const_iterator it=matchedMap.begin();it!=matchedMap.end();++it) + outIons.swap(fileIons); + outIons.reserve(outIons.size() + fileIons.size() - matchedMap.size()); + map::const_iterator it=matchedMap.begin(); + + + for(unsigned int ui=0;uifirst]); + if(it !=matchedMap.end() && (it->first == ui) ) + { + ++it; + continue; + } + + + outIons.push_back(inIons[ui]); } + + + break; } - break; - } - case REPLACE_MODE_UNION: - { - ASSERT(false); - break; + default: + ASSERT(false); } - default: - ASSERT(false); } //Only output ions if any were found @@ -816,7 +723,7 @@ || algorithm == ALGORITHM_DENSITY || algorithm == ALGORITHM_DENSITY_FILTER || algorithm == ALGORITHM_AXIAL_DF - || algorithm == ALGORITHM_LOCAL_CONCENTRATION) + || algorithm == ALGORITHM_LOCAL_CHEMISTRY) { tmpStr=TRANS(STOP_MODES[STOP_MODE_NEIGHBOUR]); @@ -1034,32 +941,15 @@ propertyList.addProperty(p,curGroup); std::string str; - ASSERT(vectorParams.size() == 2); - ASSERT(scalarParams.size() == 1); + ASSERT(vectorParams.size() == 1); stream_cast(str,vectorParams[0]); - p.key=KEY_ORIGIN; - p.name=TRANS("Origin"); - p.data=str; - p.type=PROPERTY_TYPE_POINT3D; - p.helpText=TRANS("Position for centre of cylinder"); - propertyList.addProperty(p,curGroup); - - stream_cast(str,vectorParams[1]); p.key=KEY_NORMAL; p.name=TRANS("Axis"); p.data=str; p.type=PROPERTY_TYPE_POINT3D; - p.helpText=TRANS("Vector between centre and end of cylinder"); + p.helpText=TRANS("Vector along which to calculate distribution function"); propertyList.addProperty(p,curGroup); - - stream_cast(str,scalarParams[0]); - p.key=KEY_RADIUS; - p.name=TRANS("Radius"); - p.data= str; - p.type=PROPERTY_TYPE_POINT3D; - p.helpText=TRANS("Radius of cylinder"); - propertyList.addProperty(p,curGroup); propertyList.setGroupTitle(curGroup,TRANS("Alg. Params.")); break; @@ -1120,24 +1010,23 @@ p.key=KEY_SHOW_BINOM_NORM_FREQ; propertyList.addProperty(p,curGroup); - /* TODO: IMPLEMENT ME p.name=TRANS("Expected Freq"); p.data=boolStrEnc(showTheoreticFrequencies); p.type=PROPERTY_TYPE_BOOL; - p.helpText=TRANS("Normalise the counts in the binomial histogram to a probability density function"); + p.helpText=TRANS("Show the theoretically expected probability density function for a random dataset with the same mean"); p.key=KEY_SHOW_BINOM_THEOR_FREQ; propertyList.addProperty(p,curGroup); - */ - p.name=TRANS("Display Grid"); - p.data=boolStrEnc(showGridOverlay); - p.type=PROPERTY_TYPE_BOOL; - p.helpText="Show the extruded grid in the 3D view. This may be slow"; - p.key=KEY_SHOW_BINOM_3D_GRID; - propertyList.addProperty(p,curGroup); } + + p.name=TRANS("Display Grid"); + p.data=boolStrEnc(showGridOverlay); + p.type=PROPERTY_TYPE_BOOL; + p.helpText=TRANS("Show the extruded grid in the 3D view. This may be slow"); + p.key=KEY_SHOW_BINOM_3D_GRID; + propertyList.addProperty(p,curGroup); propertyList.setGroupTitle(curGroup,TRANS("View Options")); break; @@ -1190,7 +1079,7 @@ propertyList.setGroupTitle(curGroup,TRANS("Replacement")); break; } - case ALGORITHM_LOCAL_CONCENTRATION: + case ALGORITHM_LOCAL_CHEMISTRY: { if(haveRangeParent) { @@ -1313,7 +1202,7 @@ if(ltmp>=ALGORITHM_ENUM_END) return false; - if(ltmp == ALGORITHM_LOCAL_CONCENTRATION && + if(ltmp == ALGORITHM_LOCAL_CHEMISTRY && nnMax < 2) { nnMax=2; @@ -1334,7 +1223,7 @@ case ALGORITHM_DENSITY_FILTER: case ALGORITHM_RDF: case ALGORITHM_AXIAL_DF: - case ALGORITHM_LOCAL_CONCENTRATION: + case ALGORITHM_LOCAL_CHEMISTRY: { size_t ltmp=STOP_MODE_ENUM_END; @@ -1383,9 +1272,9 @@ if(stream_cast(ltmp,value)) return false; - //NNmax should be nonzero at all times. For local concentration + //NNmax should be nonzero at all times. For local chemistry // should be at least 2 (as 1 == 100% all the time) - if(ltmp==0 || (algorithm == ALGORITHM_LOCAL_CONCENTRATION && ltmp < 2)) + if(ltmp==0 || (algorithm == ALGORITHM_LOCAL_CHEMISTRY && ltmp < 2)) return false; nnMax=ltmp; @@ -1596,12 +1485,19 @@ if(newPt.sqrMag() < sqrtf(std::numeric_limits::epsilon())) return false; - if(!(vectorParams[1] == newPt )) + if(!(vectorParams[0] == newPt )) { - vectorParams[1] = newPt; + vectorParams[0] = newPt; needUpdate=true; clearCache(); } + + + if(algorithm == ALGORITHM_AXIAL_DF) + { + vectorParams[0].normalise(); + } + return true; } case KEY_ORIGIN: @@ -1783,9 +1679,10 @@ { const char *errStrings[] = {"", TRANS("Spatial analysis aborted by user"), - TRANS("Insufficient memory to complete analysis"), - TRANS("Required range data not present"), TRANS("Insufficient memory for binomial. Reduce input size?"), + TRANS("Required range data not present"), + TRANS("Unable to generate usable binomial grid"), + TRANS("Insufficient points to continue"), TRANS("Unable to load file") }; @@ -1832,7 +1729,7 @@ case ALGORITHM_BINOMIAL: return STREAM_TYPE_PLOT | STREAM_TYPE_DRAW; case ALGORITHM_AXIAL_DF: - return STREAM_TYPE_IONS | STREAM_TYPE_PLOT | STREAM_TYPE_DRAW; + return STREAM_TYPE_PLOT ; default: return STREAM_TYPE_IONS; } @@ -2061,6 +1958,12 @@ { if(XMLHelpGetProp(replaceFile,nodePtr,"file")) return false; + + //Convert the file from relative to abs as needed + convertFileStringToAbsolute(stateFileDir, replaceFile); + //Convert to native format + replaceFile=convertFileStringToNative(replaceFile); + if(XMLHelpGetProp(replaceMode,nodePtr,"mode")) return false; @@ -2072,6 +1975,9 @@ return false; if(replaceTolerance < 0) return false; + + if(XMLHelpGetProp(replaceMass, nodePtr,"replacemass")) + return false; } else nodePtr=tmpNode; @@ -2212,15 +2118,19 @@ { case ALGORITHM_AXIAL_DF: { - if(vectorParams.size() !=2) + if(vectorParams.size() !=1) { size_t oldSize=vectorParams.size(); - vectorParams.resize(2); - + vectorParams.resize(1); if(oldSize== 0) - vectorParams[0]=Point3D(0,0,0); - if(oldSize < 2) - vectorParams[1]=Point3D(0,0,1); + vectorParams[0]=Point3D(0,0,1); + } + else + { + if(vectorParams[0].sqrMag() <=std::numeric_limits::epsilon()) + vectorParams[0]= Point3D(0,0,1); + else + vectorParams[0].normalise(); } if(scalarParams.size() !=1) @@ -2247,48 +2157,6 @@ rngF->rangeByIon(ions,ionTargetEnabled,output); } -//FIXME: Move to filter common -//Scan input datastreams to build a single point vector, -// which is a copy of the input points -//Returns 0 on no error, otherwise nonzero -size_t buildMonolithicPoints(const vector &dataIn, - ProgressData &progress, size_t totalDataSize, - vector &p) -{ - //Build monolithic point set - //--- - p.resize(totalDataSize); - - size_t dataSize=0; - - progress.filterProgress=0; - if(*Filter::wantAbort) - return FILTER_ERR_ABORT; - - for(unsigned int ui=0;uigetStreamType()) - { - case STREAM_TYPE_IONS: - { - const IonStreamData *d; - d=((const IonStreamData *)dataIn[ui]); - - if(extendDataVector(p,d->data, progress.filterProgress, - dataSize)) - return ERR_ABORT_FAIL; - - dataSize+=d->data.size(); - } - break; - default: - break; - } - } - //--- - - return 0; -} size_t SpatialAnalysisFilter::algorithmRDF(ProgressData &progress, size_t totalDataSize, const vector &dataIn, @@ -2359,7 +2227,7 @@ else if(errCode) { ASSERT(false); - return ERR_ABORT_FAIL; + return FILTER_ERR_ABORT; } if(*Filter::wantAbort) @@ -2376,8 +2244,8 @@ else { size_t errCode; - if((errCode=buildMonolithicPoints(dataIn,progress,totalDataSize,p))) - return errCode; + if((errCode=Filter::collateIons(dataIn,p,progress,totalDataSize))) + return FILTER_ERR_ABORT; progress.step=2; progress.stepName=TRANS("Build"); @@ -2582,7 +2450,7 @@ densDenom=mean*SQRT_PI*gsl_sf_fact(ui); float density; density=densNumerator/densDenom; - density*=density*density; //Cubed + density=density*density*density; //Cubed //-- //create the distribution @@ -2726,7 +2594,7 @@ progress.step=1; progress.stepName=TRANS("Collate"); progress.maxStep=3; - if((errCode=buildMonolithicPoints(dataIn,progress,totalDataSize,p))) + if((errCode=Filter::collateIons(dataIn,p,progress,totalDataSize))) return errCode; progress.step=2; @@ -2779,6 +2647,8 @@ newD->data.resize(d->data.size()); if(stopMode == STOP_MODE_NEIGHBOUR) { + unsigned int nProg=0; + bool spin=false; #pragma omp parallel for shared(spin) for(size_t uj=0;ujdata.size();uj++) @@ -2811,14 +2681,15 @@ } res.clear(); + #pragma atomic + nProg++; //Update progress as needed if(!curProg--) { #pragma omp critical { - n+=NUM_CALLBACK/(nnMax); - progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); + progress.filterProgress= (unsigned int)(((float)nProg/(float)totalDataSize)*100.0f); if(*Filter::wantAbort) spin=true; curProg=NUM_CALLBACK/(nnMax); @@ -3015,8 +2886,8 @@ progress.step=1; progress.stepName=TRANS("Collate"); progress.maxStep=3; - if((errCode=buildMonolithicPoints(dataIn,progress,totalDataSize,p))) - return errCode; + if((errCode=Filter::collateIons(dataIn,p,progress,totalDataSize))) + return FILTER_ERR_ABORT; progress.step=2; progress.stepName=TRANS("Build"); @@ -3063,9 +2934,10 @@ IonStreamData *newD = new IonStreamData; newD->parent=this; - //Adjust this number to provide more update thanusual, because we + //Adjust this number to provide more update than usual, because we //are not doing an o(1) task between updates; yes, it is a hack - unsigned int curProg=NUM_CALLBACK/(10*nnMax); + const unsigned int PROG_PER_PASS=NUM_CALLBACK/(10*nnMax); + unsigned int curProg=PROG_PER_PASS; newD->data.reserve(d->data.size()); if(stopMode == STOP_MODE_NEIGHBOUR) { @@ -3113,11 +2985,11 @@ { #pragma omp critical { - n+=NUM_CALLBACK/(nnMax); + n+=PROG_PER_PASS; progress.filterProgress= (unsigned int)(((float)n/(float)totalDataSize)*100.0f); if(*Filter::wantAbort) spin=true; - curProg=NUM_CALLBACK/(nnMax); + curProg=PROG_PER_PASS; } } } @@ -3263,6 +3135,8 @@ break; } } + progress.filterProgress=100; + //If we have bad points, let the user know. if(!badPts.empty()) { @@ -3300,261 +3174,51 @@ return 0; } -void SpatialAnalysisFilter::createCylinder(DrawStreamData * &drawData, - SelectionDevice * &s) const -{ - //Origin + normal - ASSERT(vectorParams.size() == 2); - //Add drawable components - DrawCylinder *dC = new DrawCylinder; - dC->setOrigin(vectorParams[0]); - dC->setRadius(scalarParams[0]); - dC->setColour(0.5,0.5,0.5,0.3); - dC->setSlices(40); - dC->setLength(sqrtf(vectorParams[1].sqrMag())*2.0f); - dC->setDirection(vectorParams[1]); - dC->wantsLight=true; - drawData->drawables.push_back(dC); - - - //Set up selection "device" for user interaction - //==== - //The object is selectable - dC->canSelect=true; - //Start and end radii must be the same (not a - //tapered cylinder) - dC->lockRadii(); - - s = new SelectionDevice(this); - SelectionBinding b; - //Bind the drawable object to the properties we wish - //to be able to modify - - //Bind left + command button to move - b.setBinding(SELECT_BUTTON_LEFT,FLAG_CMD,DRAW_CYLINDER_BIND_ORIGIN, - BINDING_CYLINDER_ORIGIN,dC->getOrigin(),dC); - b.setInteractionMode(BIND_MODE_POINT3D_TRANSLATE); - s->addBinding(b); - - //Bind left + shift to change orientation - b.setBinding(SELECT_BUTTON_LEFT,FLAG_SHIFT,DRAW_CYLINDER_BIND_DIRECTION, - BINDING_CYLINDER_DIRECTION,dC->getDirection(),dC); - b.setInteractionMode(BIND_MODE_POINT3D_ROTATE); - s->addBinding(b); - - //Bind right button to changing position - b.setBinding(SELECT_BUTTON_RIGHT,0,DRAW_CYLINDER_BIND_ORIGIN, - BINDING_CYLINDER_ORIGIN,dC->getOrigin(),dC); - b.setInteractionMode(BIND_MODE_POINT3D_TRANSLATE); - s->addBinding(b); - - //Bind middle button to changing orientation - b.setBinding(SELECT_BUTTON_MIDDLE,0,DRAW_CYLINDER_BIND_DIRECTION, - BINDING_CYLINDER_DIRECTION,dC->getDirection(),dC); - b.setInteractionMode(BIND_MODE_POINT3D_ROTATE); - s->addBinding(b); - - //Bind left button to changing radius - b.setBinding(SELECT_BUTTON_LEFT,0,DRAW_CYLINDER_BIND_RADIUS, - BINDING_CYLINDER_RADIUS,dC->getRadius(),dC); - b.setInteractionMode(BIND_MODE_FLOAT_TRANSLATE); - b.setFloatLimits(0,std::numeric_limits::max()); - s->addBinding(b); - - //===== - -} - -size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress, - size_t totalDataSize, const vector &dataIn, - vector &getOut,const RangeFile *rngF) + +size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress, + size_t totalDataSize, const vector &dataIn, + vector &getOut,const RangeFile *rngF) { //Need bins to perform histogram ASSERT(numBins); + //Collate all the ions into a single array + //-- progress.step=1; - progress.stepName=TRANS("Extract"); + progress.stepName=TRANS("Collate"); progress.filterProgress=0; - progress.maxStep=4; - - //Ions inside the selected cylinder, - // which are to be used as source points for dist. function query - vector ionsInside; - { - //Crop out a cylinder as the source data - CropHelper cropHelp(totalDataSize, CROP_CYLINDER_INSIDE_AXIAL, - vectorParams,scalarParams); - - float minProg,maxProg; - size_t cumulativeCount=0; - //Run cropping over the input datastreams - for(size_t ui=0; uigetStreamType() == STREAM_TYPE_IONS) - { - const IonStreamData* d; - d=(const IonStreamData *)dataIn[ui]; - size_t errCode; - minProg=cumulativeCount/(float)totalDataSize; - cumulativeCount+=d->data.size(); - maxProg=cumulativeCount/(float)totalDataSize; - - errCode=cropHelp.runFilter(d->data,ionsInside, - minProg,maxProg,progress.filterProgress); - - if(errCode == ERR_CROP_INSUFFICIENT_MEM) - return INSUFFICIENT_SIZE_ERR; - else if(errCode) - { - //If we fail, abort, but we should use - // the appropriate error code - ASSERT(errCode == ERR_CROP_CALLBACK_FAIL); - break; - } - } - - - } - } - - if(*Filter::wantAbort) - return ERR_ABORT_FAIL; - - //Now, the ions outside the targeting volume may be reduced - vector ionsOutside; - ionsOutside.resize(totalDataSize); - //Build complete set of input data - { - size_t offset=0; - - for(size_t ui=0;uigetStreamType() != STREAM_TYPE_IONS) - continue; - + progress.maxStep=3; - //Copy input data in its entirety into a single vector - const IonStreamData *d; - d=(const IonStreamData*)dataIn[ui]; - for(size_t uj=0;ujdata.size();uj++) - { - ionsOutside[offset]=d->data[uj]; - offset++; - } + vector collatedIons; + collateIons(dataIn,collatedIons,progress); + //-- - } - } + //Build the KD tree + //-- progress.step=2; - progress.stepName=TRANS("Reduce"); - progress.filterProgress=0; - - //TODO: Improve progress - switch(stopMode) - { - case STOP_MODE_RADIUS: - { - //In this case we can pull a small trick - - // do an O(n) pass to crop out the data we want, before doing the O(nlogn) tree build. - // We however must build a slightly larger cylinder to do the crop - - vector vP; - vector sP; - vP=vectorParams; - sP=scalarParams; - - //Expand radius to encapsulate cylinder contents+dMax - sP[0]+= distMax; - //Similarly expand axis (vp[0] is origin, vp[1] is zis) - vP[1].extend(distMax); - - //Crop out a cylinder as the source data - CropHelper cropHelp(totalDataSize, CROP_CYLINDER_INSIDE_AXIAL, - vP,sP); - - vector tmp; - size_t errCode=cropHelp.runFilter(ionsOutside,tmp,0,100,progress.filterProgress); - - switch(errCode) - { - case 0: - break; - case ERR_CROP_INSUFFICIENT_MEM: - return INSUFFICIENT_SIZE_ERR; - case ERR_CROP_CALLBACK_FAIL: - return ERR_ABORT_FAIL; - default: - ASSERT(false); - return ERR_ABORT_FAIL; - - } - tmp.swap(ionsOutside); - break; - } - case STOP_MODE_NEIGHBOUR: - { - //Nothing to do here! - break; - } - default: - ASSERT(false); - } - - //We only need to slice down the data if required - if(haveRangeParent) - { - -#pragma omp parallel - { - //For the ions "inside", we only care about the - // source data, not the target. Filter further using this info - #pragma omp task - { - bool sourceReduce; - sourceReduce=((size_t)std::count(ionSourceEnabled.begin(),ionSourceEnabled.end(),true) - !=ionSourceEnabled.size()); - if(sourceReduce) - { - vector tmp; - filterSelectedRanges(ionsInside,true,rngF,tmp); - ionsInside.swap(tmp); - } - } - - #pragma omp task - { - bool targetReduce; - targetReduce=((size_t)std::count(ionTargetEnabled.begin(),ionTargetEnabled.end(),true) - !=ionTargetEnabled.size() ); - if(targetReduce) - { - vector tmp; - filterSelectedRanges(ionsOutside,false,rngF,tmp); - ionsOutside.swap(tmp); - } - } - } - } - - progress.step=3; progress.stepName=TRANS("Build"); progress.filterProgress=0; - //Strip away the real value information, leaving just point data - vector src,dest; - IonHit::getPoints(ionsInside,src); - ionsInside.clear(); - - IonHit::getPoints(ionsOutside,dest); - ionsOutside.clear(); - - K3DTree tree; - - tree.buildByRef(dest); + K3DTreeMk2 tree; + tree.resetPts(collatedIons,false); + tree.build(); if(*Filter::wantAbort) return FILTER_ERR_ABORT; + //-- - progress.step=4; + //Create an array of source points + //-- + //FIXME: Allow for range selection + vector srcPoints; + srcPoints.resize(collatedIons.size()); +#pragma omp parallel for + for(unsigned int ui=0;uigetStreamType()) - { - case STREAM_TYPE_IONS: - case STREAM_TYPE_RANGE: - //Do not propagate ranges, or ions - break; - default: - getOut.push_back(dataIn[ui]); - break; - } - - } - - //create the selection device for this algorithm - createDevice(getOut); - return 0; } @@ -3691,7 +3336,8 @@ progress.maxStep=2; //Merge the ions form the incoming streams - Filter::collateIons(dataIn,ions,progress,totalDataSize); + if(Filter::collateIons(dataIn,ions,progress,totalDataSize)) + return FILTER_ERR_ABORT; //Tell user we are on next step progress.step++; @@ -3702,6 +3348,8 @@ SEGMENT_OPTION segmentOpts; + //Set binomial parameters, including block + // generation method (currently only AUTO_BRICK) segmentOpts.nIons=numIonsSegment; segmentOpts.strategy=BINOMIAL_SEGMENT_AUTO_BRICK; segmentOpts.extrusionDirection=extrusionDirection; @@ -3709,15 +3357,15 @@ vector gridEntries; + //work out which ions we enabled vector selectedIons; - for(size_t ui=0;uiparent=this; plt->plotMode=PLOT_MODE_1D; plt->plotStyle=PLOT_LINE_STEM; - plt->xLabel=TRANS("Block size"); + plt->xLabel=TRANS("Ions in Block"); if(showNormalisedBinomialFrequencies) - plt->yLabel=TRANS("Rel. Frequency"); + plt->yLabel=TRANS("Probability"); else plt->yLabel=TRANS("Count"); @@ -3871,7 +3521,13 @@ if(!showTheoreticFrequencies) return 0; - for(size_t ui=0;ui > *mapTarget; + if(showNormalisedBinomialFrequencies) + mapTarget = &binHist.theoreticNormalisedFrequencies; + else + mapTarget = &binHist.theoreticFrequencies; + for(size_t ui=0;uisize(); ui++) { if(binHist.theoreticFrequencies[ui].empty()) continue; @@ -3882,12 +3538,12 @@ plt->index=ui + binHist.mapIonFrequencies.size(); plt->parent=this; plt->plotMode=PLOT_MODE_1D; - plt->plotStyle=PLOT_LINE_STEM; - plt->xLabel=TRANS("Block size"); + plt->plotStyle=PLOT_LINE_STEPS; + plt->xLabel=TRANS("Ions in Block"); if(showNormalisedBinomialFrequencies) - plt->yLabel=TRANS("Rel. Frequency"); + plt->yLabel=TRANS("Probability"); else - plt->yLabel=TRANS("Count"); + plt->yLabel=TRANS("Count (blocks)"); //set the title string ionName; @@ -3901,26 +3557,15 @@ plt->r=colour.red; plt->g=colour.green; plt->b=colour.blue; - plt->xyData.resize(binHist.theoreticFrequencies[ui].size()); + plt->xyData.resize((*mapTarget)[ui].size()); + //for each species, record the number of ions size_t offset=0; - if(showNormalisedBinomialFrequencies) + for(map::const_iterator it=(*mapTarget)[ui].begin(); + it!=(*mapTarget)[ui].end();++it) { - for(map::const_iterator it=binHist.theoreticNormalisedFrequencies[ui].begin(); - it!=binHist.theoreticNormalisedFrequencies[ui].end();++it) - { - plt->xyData[offset]=std::make_pair(it->first,it->second); - offset++; - } - } - else - { - for(map::const_iterator it=binHist.theoreticFrequencies[ui].begin(); - it!=binHist.theoreticFrequencies[ui].end();++it) - { - plt->xyData[offset]=std::make_pair(it->first,it->second); - offset++; - } + plt->xyData[offset]=std::make_pair(it->first,it->second); + offset++; } cacheAsNeeded(plt); @@ -4063,7 +3708,7 @@ } if(*Filter::wantAbort) - return false; + return ERR_ABORT_FAIL; } ASSERT(curOffset == pSource.size()); @@ -4115,10 +3760,10 @@ dCount++; } //-- + - //compute concentration if( nCount + dCount ) - pSource[ui].setMassToCharge((float)nCount/(float)(nCount + dCount)*100.0f); + pSource[ui].setMassToCharge((float)nCount/(float)(dCount)*100.0f); else pSource[ui].setMassToCharge(-1.0f); @@ -4230,11 +3875,8 @@ } //distance between search pt and found pt - float sqrDistance; - sqrDistance = searchTree.getPtRef(ptIdx).sqrDist(pSource[ui].getPosRef()); - if(sqrDistance > DISTANCE_EPSILON) - ptsFound.insert(ptIdx); + ptsFound.insert(ptIdx); } @@ -4244,8 +3886,14 @@ //Count the number of numerator and denominator ions, using the masses we set aside earlier for(set::iterator it=ptsFound.begin(); it!=ptsFound.end(); ++it) { - float ionMass; + //check that the distance is non-zero, to force no self-matching + float sqrDistance; + sqrDistance = searchTree.getPtRef(*it).sqrDist(pSource[ui].getPosRef()); + if(sqrDistance < DISTANCE_EPSILON) + continue; + + float ionMass; ionMass = dataMasses[searchTree.getOrigIndex(*it)]; unsigned int ionID; @@ -4260,7 +3908,7 @@ } //compute concentration - pSource[ui].setMassToCharge((float)nCount/(float)(nCount + dCount)*100.0f); + pSource[ui].setMassToCharge((float)nCount/(float)(dCount)*100.0f); #ifdef _OPENMP if(!omp_get_thread_num()) @@ -4310,7 +3958,7 @@ outData->estimateIonParameters(dataIn); //override colour to grey outData->g = outData->b = outData->r = 0.5; - outData->valueType = "Relative Conc. (%)"; + outData->valueType = TRANS("Relative Conc. (%)"); outData->data.swap(pSource); cacheAsNeeded(outData); @@ -4326,9 +3974,11 @@ bool nnHistogramTest(); bool rdfPlotTest(); bool axialDistTest(); -bool replaceTest(); +bool replaceIntersectAndUnionTest(); bool localConcTestRadius(); bool localConcTestNN(); +bool replaceSubtractTest(); +bool replaceUnionTest(); bool SpatialAnalysisFilter::runUnitTests() { @@ -4343,8 +3993,15 @@ if(!axialDistTest()) return false; - if(!replaceTest()) + if(!replaceIntersectAndUnionTest()) return false; + + if(!replaceSubtractTest()) + return false; + + if(!replaceUnionTest()) + return false; + if(!localConcTestRadius()) return false; @@ -4598,38 +4255,115 @@ delete d; streamIn.clear(); - //1 plot, one set of ions - TEST(streamOut.size() == 2,"stream count"); + //1 plot + TEST(streamOut.size() == 1,"stream count"); + TEST(streamOut[0]->getStreamType() == STREAM_TYPE_PLOT,"stream type"); + delete streamOut[0]; + + + return true; +} + +bool replaceIntersectAndUnionTest() +{ + std::string ionFile=createTmpFilename(NULL,".pos"); + + vector ions; + const unsigned int NIONS=10; + for(unsigned int ui=0;uidata.swap(ions); - for(size_t ui=0;uisetCaching(false); + //Set it to do a union calculation + bool needUp; + string s; + s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); + TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); + TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); + s="1"; + TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); + + vector opVec; + opVec.push_back(REPLACE_MODE_INTERSECT); + opVec.push_back(REPLACE_MODE_UNION); + + ProgressData p; + vector streamIn,streamOut; + streamIn.push_back(d); + for(unsigned int opId=0;opIdgetStreamType(); - delete streamOut[ui]; - } + s=TRANS(REPLACE_ALGORITHMS[opVec[opId]]); + TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); + //Do the refresh + TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); + TEST(streamOut.size() == 1,"stream count"); + TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); + TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); - TEST(streamMask == ( STREAM_TYPE_DRAW | STREAM_TYPE_PLOT) , "Stream type checking"); + //we should have taken the mass-to-charge from the file + const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; + for(unsigned int ui=0;uidata[ui].getMassToCharge() == 1); + } + delete streamOut[0]; + streamOut.clear(); + } + delete f; + delete d; + + wxRemoveFile(ionFile); + return true; } -bool replaceTest() +bool replaceSubtractTest() { std::string ionFile=createTmpFilename(NULL,".pos"); vector ions; const unsigned int NIONS=10; + const unsigned int DIFF_COUNT=5; for(unsigned int ui=0;ui tmpI; for(unsigned int ui=0;uidata.swap(ions); @@ -4638,19 +4372,81 @@ SpatialAnalysisFilter *f=new SpatialAnalysisFilter; f->setCaching(false); - //Set it to do a union calculation + //Set it to do a subtraction calculation bool needUp; string s; s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); - s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_INTERSECT]); + s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_SUBTRACT]); TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); + + //Do the refresh + ProgressData p; + vector streamIn,streamOut; + streamIn.push_back(d); + TEST(!f->refresh(streamIn,streamOut,p),"refresh OK"); + delete f; + delete d; + streamIn.clear(); + + TEST(streamOut.size() == 1,"stream count"); + TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); + TEST(streamOut[0]->getNumBasicObjects() == DIFF_COUNT,"Number objects"); + + //we should have taken the mass-to-charge from the original data, + // not the file + const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; + for(unsigned int ui=0;uigetNumBasicObjects(); ui++) + { + ASSERT(outIons->data[ui].getMassToCharge() == 1); + ASSERT(outIons->data[ui].getPos()[2] >= 0); + } + + wxRemoveFile(ionFile); + + delete streamOut[0]; + + return true; +} + +bool replaceUnionTest() +{ + std::string ionFile=createTmpFilename(NULL,".pos"); + //"B" dataset + vector ions; + ions.push_back(IonHit(Point3D(0,0,0),1)); + ions.push_back(IonHit(Point3D(1,0,1),1)); + ions.push_back(IonHit(Point3D(0,1,1),1)); + + IonHit::makePos(ions,ionFile.c_str()); + ions.clear(); + + //"A" dataset + ions.push_back(IonHit(Point3D(0,0,0),2)); + ions.push_back(IonHit(Point3D(1,0,-1),2)); + ions.push_back(IonHit(Point3D(0,1,-1),2)); + + + IonStreamData *d = new IonStreamData; + d->data.swap(ions); + + //Create a spatial analysis filter + SpatialAnalysisFilter *f=new SpatialAnalysisFilter; + f->setCaching(false); + + //Set it to do a union calculation + bool needUp; + string s; + s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_REPLACE]); + TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop"); + TEST(f->setProperty(KEY_REPLACE_FILE,ionFile,needUp),"Set prop"); + s=TRANS(REPLACE_ALGORITHMS[REPLACE_MODE_UNION]); + TEST(f->setProperty(KEY_REPLACE_ALGORITHM,s,needUp),"Set prop"); s="1"; TEST(f->setProperty(KEY_REPLACE_VALUE,s,needUp),"Set prop"); - //Do the refresh ProgressData p; vector streamIn,streamOut; @@ -4662,14 +4458,16 @@ TEST(streamOut.size() == 1,"stream count"); TEST(streamOut[0]->getStreamType() == STREAM_TYPE_IONS,"stream type"); - TEST(streamOut[0]->getNumBasicObjects() == NIONS,"Number objects"); + TEST(streamOut[0]->getNumBasicObjects() == 5,"Number objects"); - //we should have taken the mass-to-charge from the file + //There should be const IonStreamData *outIons = (const IonStreamData*)streamOut[0]; - for(unsigned int ui=0;uigetNumBasicObjects(); ui++) { - ASSERT(outIons->data[ui].getMassToCharge() == 1); + sumV+=outIons->data[ui].getMassToCharge(); } + TEST( EQ_TOL(sumV,7.0f),"mass-to-charge check"); wxRemoveFile(ionFile); @@ -4678,8 +4476,7 @@ return true; } - -//--- Local concentration tests -- +//--- Local chemistry tests -- const IonStreamData *createLCIonStream() { IonStreamData*d = new IonStreamData; @@ -4709,6 +4506,8 @@ return d; } +//Create a single range stream with a range file ~ as follows: +// Ion A: [0.5 1.5] Ion B: [1.5 2.5] Ion C: [2.5 3.5] RangeStreamData *createLCRangeStream() { //Create a fake rangefile @@ -4732,6 +4531,8 @@ return r; } +//Create a spatial analysis filter that computes +// A (source) B (numerator) C(denominator) SpatialAnalysisFilter *createLCTestSpatialFilter(const vector &in) { //Create a spatial analysis filter @@ -4740,12 +4541,12 @@ //inform it about the rangefile vector< const FilterStreamData *> out; f->initFilter(in,out); - //Set Filter to perform local concentration analysis + //Set Filter to perform local chemistry analysis // - dist termination, //--- bool needUp; string s; - s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_LOCAL_CONCENTRATION]); + s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_LOCAL_CHEMISTRY]); if(!(f->setProperty(KEY_ALGORITHM,s,needUp)) ) { cerr << "Failed Set prop (algorithm)"; @@ -4814,7 +4615,7 @@ IonStreamData *ionD = (IonStreamData *)streamOut[0]; float localConc = ionD->data[0].getMassToCharge(); - TEST(EQ_TOL(localConc,1.0/3.0*100.0),"Local Concentration check"); + TEST(EQ_TOL(localConc,1.0/2.0*100.0),"Local Chemistry check"); delete rngStream->rangeFile; @@ -4867,7 +4668,7 @@ IonStreamData *ionD = (IonStreamData *)streamOut[0]; float localConc = ionD->data[0].getMassToCharge(); - TEST(EQ_TOL(localConc,1.0/3.0*100.0),"Local Concentration check"); + TEST(EQ_TOL(localConc,1.0/2.0*100.0),"Local Chemistry check"); delete rngStream->rangeFile; diff -Nru 3depict-0.0.19-1/src/backend/filters/spatialAnalysis.h 3depict-0.0.20/src/backend/filters/spatialAnalysis.h --- 3depict-0.0.19-1/src/backend/filters/spatialAnalysis.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/spatialAnalysis.h 2017-01-21 11:37:23.000000000 +0000 @@ -165,16 +165,6 @@ size_t algorithmLocalConcentration(ProgressData &progress, size_t totalDataSize, const std::vector &dataIn, std::vector &getOut, const RangeFile *rngF); - //Create a 3D manipulable cylinder as an output drawable - // using the parameters stored inside the vector/scalar params - // both parameters are outputs from this function - void createCylinder(DrawStreamData* &d, SelectionDevice * &s) const; - - - //Wrapper routeine to create the appropriate selection - // device for whatever algorithm is in use; device list will be appended to - // and if needed, output object will be generated - void createDevice(std::vector &getOut); //From the given input ions, filter them down using the user diff -Nru 3depict-0.0.19-1/src/backend/filters/spectrumPlot.cpp 3depict-0.0.20/src/backend/filters/spectrumPlot.cpp --- 3depict-0.0.19-1/src/backend/filters/spectrumPlot.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/spectrumPlot.cpp 2017-01-27 00:15:49.000000000 +0000 @@ -151,6 +151,7 @@ //Only report the spectrum plot propagateCache(getOut); + progress.filterProgress=100; return 0; } @@ -517,6 +518,8 @@ getOut.push_back(d); + progress.filterProgress=100; + return 0; } @@ -1317,8 +1320,11 @@ bool countTest() { - using std::auto_ptr; - auto_ptr d; +#ifdef __HAVE_CPP11__ + std::unique_ptr d; +#else + std::auto_ptr d; +#endif const unsigned int VOL[]={ 10,10,10 }; diff -Nru 3depict-0.0.19-1/src/backend/filters/transform.cpp 3depict-0.0.20/src/backend/filters/transform.cpp --- 3depict-0.0.19-1/src/backend/filters/transform.cpp 2016-05-16 23:55:50.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/transform.cpp 2017-01-21 11:38:00.000000000 +0000 @@ -777,10 +777,15 @@ d->data.push_back(src->data[uj]); } - d->estimateIonParameters(src); - cacheAsNeeded(d); - - getOut.push_back(d); + if(d->data.size()) + { + d->estimateIonParameters(src); + cacheAsNeeded(d); + + getOut.push_back(d); + } + else + delete d; } } } @@ -998,8 +1003,10 @@ break; } + } } - } + + progress.filterProgress=100; } else { @@ -1016,15 +1023,7 @@ //Set up output ion stream IonStreamData *d=new IonStreamData; d->parent=this; - - //TODO: Better output colouring/size - //Set up ion metadata - d->r = 0.5; - d->g = 0.5; - d->b = 0.5; - d->a = 0.5; - d->ionSize = 2.0; - d->valueType=TRANS("Mass-to-Charge (Da/e)"); + d->estimateIonParameters(dataIn); // get best meta data we can size_t curPos=0; @@ -1233,7 +1232,7 @@ p.name=TRANS("Origin"); p.data=tmpStr; p.type=PROPERTY_TYPE_POINT3D; - p.helpText=TRANS("Origin of scale trasnform"); + p.helpText=TRANS("Origin of scale transform"); propertyList.addProperty(p,curGroup); } @@ -1260,7 +1259,7 @@ p.name=TRANS("Origin"); p.data=tmpStr; p.type=PROPERTY_TYPE_POINT3D; - p.helpText=TRANS("Origin of scale trasnform"); + p.helpText=TRANS("Origin of scale transform"); propertyList.addProperty(p,curGroup); } @@ -1269,7 +1268,7 @@ p.key=KEY_SCALEFACTOR_ANISOTROPIC; p.name=TRANS("Scale Fact."); p.data=tmpStr; - p.type=PROPERTY_TYPE_REAL; + p.type=PROPERTY_TYPE_POINT3D; p.helpText=TRANS("Enlargement factor for scaling around origin"); propertyList.addProperty(p,curGroup); @@ -1526,6 +1525,11 @@ case KEY_CROP_MINIMUM: { ASSERT(scalarParams.size() ==2); + float tmp; + if(stream_cast(tmp,value) || tmp >=scalarParams[1]) + return false; + + if(!applyPropertyNow(scalarParams[0],value,needUpdate)) return false; break; @@ -1533,6 +1537,9 @@ case KEY_CROP_MAXIMUM: { ASSERT(scalarParams.size() ==2); + float tmp; + if(stream_cast(tmp,value) || tmp <=scalarParams[0]) + return false; if(!applyPropertyNow(scalarParams[1],value,needUpdate)) return false; break; diff -Nru 3depict-0.0.19-1/src/backend/filters/voxelise.cpp 3depict-0.0.20/src/backend/filters/voxelise.cpp --- 3depict-0.0.19-1/src/backend/filters/voxelise.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/voxelise.cpp 2017-01-29 18:16:02.000000000 +0000 @@ -48,6 +48,10 @@ KEY_VOXEL_SLICE_AXIS, KEY_VOXEL_SLICE_OFFSET, KEY_VOXEL_SLICE_INTERP, + + //free-slice parameters + KEY_VOXEL_SLICE_OFFSET3D, + KEY_VOXEL_SLICE_NORMAL3D, KEY_FILTER_MODE, KEY_FILTER_RATIO, @@ -104,7 +108,8 @@ const bool VOXEL_REPRESENT_KEEPCACHE[] = { true, true, - false + false, + false, }; const char *NORMALISE_TYPE_STRING[] = { @@ -117,7 +122,8 @@ const char *REPRESENTATION_TYPE_STRING[] = { NTRANS("Point Cloud"), NTRANS("Isosurface"), - NTRANS("Axial slice") + NTRANS("Axial slice"), + NTRANS("Slice") }; const char *VOXELISE_FILTER_TYPE_STRING[]={ @@ -171,6 +177,7 @@ return 0; } + // == Voxels filter == VoxeliseFilter::VoxeliseFilter() : fixedWidth(false), normaliseType(VOXELISE_NORMALISETYPE_NONE) @@ -191,7 +198,7 @@ representation=VOXEL_REPRESENT_POINTCLOUD; - colourMap=0; + colourMap=COLOURMAP_VIRIDIS; autoColourMap=true; colourMapBounds[0]=0; colourMapBounds[1]=1; @@ -211,6 +218,11 @@ sliceInterpolate=VOX_INTERP_NONE; sliceAxis=0; sliceOffset=0.5; + + freeSlicePlane=Point3D(0.5,0.5,0.5); + freeSliceNormal=Point3D(1,1,1); + freeSliceNormal.normalise(); + showColourBar=false; @@ -380,9 +392,16 @@ if(cacheOK) { propagateCache(getOut); + progress.filterProgress=100; return 0; } + progress.step = 1; + progress.maxStep=2; + if(filterMode != VOXELISE_FILTERTYPE_NONE) + progress.maxStep++; + + progress.stepName=TRANS("Counting"); Voxels voxelData; if(!voxelCache.getSize()) @@ -390,7 +409,11 @@ Point3D minP,maxP; bc.setInverseLimits(); - + + //FIXME: this is technically wrong in some edge cases. + // We disallow pair-wise points, even though if taken in conjunction + // they might form a valid bounding box with other points not in the same + // data stream for (size_t i = 0; i < dataIn.size(); i++) { //Check for ion stream types. Block others from propagation. @@ -412,14 +435,15 @@ if (!bc.isValid() || bc.isFlat()) return VOXELISE_BOUNDS_INVALID_ERR; bc.getBounds(minP,maxP); + //Disallow empty bounding boxes (ie, produce no output) + if(minP == maxP) + return 0; + if (fixedWidth) calculateNumBinsFromWidths(binWidth, nBins); else calculateWidthsFromNumBins(binWidth, nBins); - //Disallow empty bounding boxes (ie, produce no output) - if(minP == maxP) - return 0; //Rebuild the voxels from the point data Voxels vsDenom; @@ -435,9 +459,13 @@ } const IonStreamData *is; + //Update totalsize of ion data + size_t totalSize=getTotalSizeByType(dataIn,STREAM_TYPE_IONS); if(rsdIncoming) { + + size_t currentSize=0; for (size_t i = 0; i < dataIn.size(); i++) { @@ -462,9 +490,9 @@ thisIonEnabled=false; if(thisIonEnabled) - { countPoints(voxelData,is->data,true); - } + + } //If the user requests normalisation, compute the denominator dataset @@ -492,6 +520,11 @@ if(*Filter::wantAbort) return VOXELISE_ABORT_ERR; + + //update progress + currentSize+=is->data.size(); + progress.filterProgress = ((float)currentSize/(float)totalSize*100.0f); + } //Perform normalsiation @@ -504,6 +537,7 @@ else { //No range data. Just count + size_t currentSize=0; for (size_t i = 0; i < dataIn.size(); i++) { @@ -517,15 +551,23 @@ return VOXELISE_ABORT_ERR; } + + //update progress + currentSize+=is->data.size(); + progress.filterProgress = ((float)currentSize/(float)totalSize*100.0f); } ASSERT(normaliseType != VOXELISE_NORMALISETYPE_COUNT2INVOXEL && normaliseType!=VOXELISE_NORMALISETYPE_ALLATOMSINVOXEL); if (normaliseType == VOXELISE_NORMALISETYPE_VOLUME) voxelData.calculateDensity(); } + progress.filterProgress=100; vsDenom.clear(); + + if(filterMode!=VOXELISE_FILTERTYPE_NONE) + progress.step++; //Perform voxel filtering switch(filterMode) @@ -534,11 +576,13 @@ break; case VOXELISE_FILTERTYPE_GAUSS: { + progress.stepName=TRANS("Gauss Smooth"); voxelData.isotropicGaussianSmooth(gaussDev,filterRatio); break; } case VOXELISE_FILTERTYPE_LAPLACE: { + progress.stepName=TRANS("Calc. Laplace"); voxelData.laplaceOfGaussian(gaussDev,filterRatio); break; } @@ -552,6 +596,7 @@ { //Use the cached value voxelData=voxelCache; + progress.filterProgress=100; } float min,max; @@ -566,12 +611,12 @@ //Update the bounding cube - { - Point3D p1,p2; - voxelData.getBounds(p1,p2); - lastBounds.setBounds(p1,p2); - } + Point3D pb1,pb2; + voxelData.getBounds(pb1,pb2); + lastBounds.setBounds(pb1,pb2); + progress.step++; + progress.stepName=TRANS("Representation"); switch(representation) { @@ -620,7 +665,7 @@ SelectionDevice *s = new SelectionDevice(this); SelectionBinding b; - //Bind translation to sphere left click + //Bind translation to left click b.setBinding(SELECT_BUTTON_LEFT,0,DRAW_QUAD_BIND_ORIGIN, BINDING_PLANE_ORIGIN,dq->getOrigin(),dq); b.setInteractionMode(BIND_MODE_POINT3D_TRANSLATE); @@ -641,7 +686,146 @@ cacheOK=false; + break; + } + case VOXEL_REPRESENT_SLICE: + { + Point3D p; + p = freeSlicePlane*(pb2-pb1) + pb1; + vector vPts; + lastBounds.getPlaneIntersectVertices(p,freeSliceNormal, vPts); + + if(vPts.size() < 3) + break; + + RandNumGen rng; + rng.initTimer(); + + //Compute average side-length, then convert this into + // average bins per unit area + Point3D voxPitch = voxelData.getPitch(); + float meanLenPerBin=0; + for(unsigned int ui=0;ui<3;ui++) + meanLenPerBin+=voxPitch[ui]; //length/bin + meanLenPerBin/=3; //average + + + //Per Stephenson, PhD Thesis, Sydney University, 2009 + // Appendix B, CSR nearest neighbour + // calculations for D-dimensional spatial data + + // in 2D, 1NN distance. + //Gamma(1+ 1/2)^2 + const float GAMMA_1P5_SQR = 0.78540; + + const float density = 2/M_PI*(GAMMA_1P5_SQR/(meanLenPerBin*meanLenPerBin)); + + + //scatter some points in the plane + vector vRes; + scatterPointsInPolygon(vPts,freeSliceNormal,density,rng,vRes); + + //Add the bounding edges + for(unsigned int ui=0;ui tA,tB,tC; //triangle linkages + do2DDelaunay(dBuf,vRes.size(),tA,tB,tC); + delete[] dBuf; + + + //Create triangles that form surface + DrawStreamData *d = new DrawStreamData(this); + d->cached=0; + + float minV,maxV; + voxelData.minMax(minV,maxV); + + DrawTriangleMesh *tm = new DrawTriangleMesh(); + tm->canSelect=true; + + + vector idx; + idx.resize(tA.size()); + for(unsigned int ui=0;uisetData(vRes,idx); + + + //Create the user interaction bindings + //--- + SelectionDevice *s = new SelectionDevice(this); + SelectionBinding b[2]; + //Bind translation to sphere left click + // - + BoundCube bMesh; + tm->getBoundingBox(bMesh); + + b[0].setBinding(SELECT_BUTTON_LEFT,0,DRAW_TRIMESH_BIND_ORIGIN, + BINDING_PLANE_ORIGIN,bMesh.getCentroid(),tm); + b[0].setInteractionMode(BIND_MODE_POINT3D_TRANSLATE); + s->addBinding(b[0]); + // - + + //Bind orientation to left click on vector + // - + const float DRAWSCALE=10.0f; + DrawVector *dV = new DrawVector; + dV->setOrigin(p); + dV->setVector(freeSliceNormal*DRAWSCALE); + dV->wantsLight=true; + dV->canSelect=true; + d->drawables.push_back(dV); + + + b[1].setBinding(SELECT_BUTTON_LEFT,0,DRAW_VECTOR_BIND_ORIENTATION, + BINDING_PLANE_DIRECTION, freeSlicePlane,dV); + b[1].setInteractionMode(BIND_MODE_POINT3D_ROTATE); + b[1].setFloatLimits(0,std::numeric_limits::max()); + s->addBinding(b[1]); + // - + + devices.push_back(s); + //--- + + + d->drawables.push_back(tm); + + if(showColourBar) + d->drawables.push_back(makeColourBar(minV,maxV,255,colourMap)); + getOut.push_back(d); + break; } + default: + ASSERT(false); + } @@ -656,24 +840,55 @@ { case BINDING_PLANE_ORIGIN: { - ASSERT(representation == VOXEL_REPRESENT_AXIAL_SLICE); - ASSERT(lastBounds.isValid()); - - //Convert the world coordinate value into a - // fractional value of voxel bounds + switch(representation ) + { + case VOXEL_REPRESENT_AXIAL_SLICE: + { + ASSERT(lastBounds.isValid()); + + //Convert the world coordinate value into a + // fractional value of voxel bounds + Point3D p; + float f; + b.getValue(p); + f=p[sliceAxis]; + + float minB,maxB; + minB = lastBounds.getBound(sliceAxis,0); + maxB = lastBounds.getBound(sliceAxis,1); + sliceOffset= (f -minB)/(maxB-minB); + + sliceOffset=std::min(sliceOffset,1.0f); + sliceOffset=std::max(sliceOffset,0.0f); + ASSERT(sliceOffset<=1 && sliceOffset>=0); + break; + } + case VOXEL_REPRESENT_SLICE: + { + Point3D p; + b.getValue(p); + Point3D pb1,pb2; + lastBounds.getBounds(pb1,pb2); + //The slice plane is defiend using fractional + // coordinates + freeSlicePlane = (p- pb1)/(pb2-pb1); + break; + } + default: + + ASSERT(false); + } + break; + } + case BINDING_PLANE_DIRECTION: + { + //Normal change should only be set for free-slice + ASSERT(representation == VOXEL_REPRESENT_SLICE); Point3D p; - float f; b.getValue(p); - f=p[sliceAxis]; + p.normalise(); - float minB,maxB; - minB = lastBounds.getBound(sliceAxis,0); - maxB = lastBounds.getBound(sliceAxis,1); - sliceOffset= (f -minB)/(maxB-minB); - - sliceOffset=std::min(sliceOffset,1.0f); - sliceOffset=std::max(sliceOffset,0.0f); - ASSERT(sliceOffset<=1 && sliceOffset>=0); + freeSliceNormal =p; break; } default: @@ -915,17 +1130,14 @@ //start a new group for the visual representation //---------------------------- choices.clear(); - tmpStr=getRepresentTypeString(VOXEL_REPRESENT_POINTCLOUD); - choices.push_back(make_pair((unsigned int)VOXEL_REPRESENT_POINTCLOUD,tmpStr)); - tmpStr=getRepresentTypeString(VOXEL_REPRESENT_ISOSURF); - choices.push_back(make_pair((unsigned int)VOXEL_REPRESENT_ISOSURF,tmpStr)); - tmpStr=getRepresentTypeString(VOXEL_REPRESENT_AXIAL_SLICE); - choices.push_back(make_pair((unsigned int)VOXEL_REPRESENT_AXIAL_SLICE,tmpStr)); - - tmpStr= choiceString(choices,representation); + for(unsigned int ui=0;ui1 coordinates"); + p.key=KEY_VOXEL_SLICE_OFFSET3D; + propertyList.addProperty(p,curGroup); + + + + stream_cast(tmpStr,freeSliceNormal); + p.name=TRANS("Slice Normal"); + p.data=tmpStr; + p.type=PROPERTY_TYPE_POINT3D; + p.helpText=TRANS("Normal vector for slice"); + p.key=KEY_VOXEL_SLICE_NORMAL3D; + propertyList.addProperty(p,curGroup); + + // --- + propertyList.setGroupTitle(curGroup,TRANS("Surface")); + curGroup++; + + + + //-- Slice visualisation parameters -- + choices.clear(); + for(unsigned int ui=0;ui=NUM_COLOURMAPS || tmpMap ==colourMap) + if(tmpMap >=COLOURMAP_ENUM_END|| tmpMap ==colourMap) return false; //clear the generic filter cache (i.e. cached outputs) @@ -1524,6 +1827,22 @@ } break; } + case KEY_VOXEL_SLICE_OFFSET3D: + { + if(!applyPropertyNow(freeSlicePlane,value,needUpdate)) + return false; + + break; + + } + case KEY_VOXEL_SLICE_NORMAL3D: + { + if(!applyPropertyNow(freeSliceNormal,value,needUpdate)) + return false; + + break; + + } default: { unsigned int subKeyType,offset; @@ -1617,7 +1936,7 @@ f << tabs(depth+2) << "" << endl; f << tabs(depth+2) << "" << endl; + colourMapBounds[0] << "\" max=\"" << colourMapBounds[1] << "\" map=\"" << colourMap << "\"/>" << endl; f << tabs(depth+1) << "" << endl; @@ -1671,7 +1990,7 @@ if(stream_cast(nBins[i],v1[i])) return false; - if(nBins[i] <= 0) + if(nBins[i] == 0) return false; } xmlFree(xmlString); @@ -1845,6 +2164,15 @@ if(colourMapBounds[0] >= colourMapBounds[1]) return false; + + //FIXME: Break compat + //There is a bug in <=0.0.19, where the map was not stored. + // if we don't have a map entry, set the value to jet, as this was + // the default at the time. + if(!XMLGetAttrib(sliceNodes,colourMapBounds[1],"max")) + { + colourMap=COLOURMAP_JET; + } } diff -Nru 3depict-0.0.19-1/src/backend/filters/voxelise.h 3depict-0.0.20/src/backend/filters/voxelise.h --- 3depict-0.0.19-1/src/backend/filters/voxelise.h 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filters/voxelise.h 2017-01-21 11:37:16.000000000 +0000 @@ -91,6 +91,10 @@ size_t sliceAxis; //Fractional offset from lower bound of data cube [0,1] float sliceOffset; + + //Plane and normal for free slice. Note that the plane coordinate is in reduced voxel coords for each axis + Point3D freeSlicePlane,freeSliceNormal; + //Obtain a textured slice from the given voxel set void getTexturedSlice(const Voxels &f, diff -Nru 3depict-0.0.19-1/src/backend/filtertreeAnalyse.cpp 3depict-0.0.20/src/backend/filtertreeAnalyse.cpp --- 3depict-0.0.19-1/src/backend/filtertreeAnalyse.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/filtertreeAnalyse.cpp 2017-01-21 11:37:20.000000000 +0000 @@ -178,6 +178,8 @@ //check for unranged data required by child checkUnrangedData(f); + //Check root filters are data source + checkRootIsDataSource(f); emitTypes.clear(); blockTypes.clear(); @@ -515,6 +517,23 @@ return affectsComposition; } +void FilterTreeAnalyse::checkRootIsDataSource(const FilterTree &f) +{ + const tree &treeFilt=f.getTree(); + for(tree::sibling_iterator it = treeFilt.begin(); it!=treeFilt.end(); ++it) + { + if(!(*it)->isPureDataSource()) + { + FILTERTREE_ERR treeErr; + treeErr.reportedFilters.push_back(*it); + treeErr.verboseReportMessage = TRANS("Filter cannot generate data, but has no input - it is at the tree base."); + treeErr.shortReportMessage = TRANS("Non data-generating filter at root"); + treeErr.severity=ANALYSE_SEVERITY_ERROR; //This is definitely a bad thing. + analysisResults.push_back(treeErr); + } + } +} + bool filterAffectedByComposition(const Filter *f, bool haveRngParent) { FilterPropGroup props; diff -Nru 3depict-0.0.19-1/src/backend/filtertreeAnalyse.h 3depict-0.0.20/src/backend/filtertreeAnalyse.h --- 3depict-0.0.19-1/src/backend/filtertreeAnalyse.h 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/filtertreeAnalyse.h 2016-10-29 20:37:05.000000000 +0000 @@ -70,6 +70,9 @@ //check to see if there is a filter that needs unranged data to work, // but does not have it void checkUnrangedData(const FilterTree &f); + + //Check that the root filter is source of data + void checkRootIsDataSource(const FilterTree &f); public: void analyse(const FilterTree &f); diff -Nru 3depict-0.0.19-1/src/backend/filtertree.cpp 3depict-0.0.20/src/backend/filtertree.cpp --- 3depict-0.0.19-1/src/backend/filtertree.cpp 2016-05-23 15:57:53.000000000 +0000 +++ 3depict-0.0.20/src/backend/filtertree.cpp 2017-01-21 11:37:33.000000000 +0000 @@ -207,7 +207,7 @@ #ifdef DEBUG checkSanity(); #endif - for(size_t ui=level+1;ui::iterator it=nodes[ui].begin(); it!=nodes[ui].end(); ++it) delete *it; @@ -801,15 +801,14 @@ #ifdef DEBUG //Perform sanity checks on filter output checkRefreshValidity(curData,currentFilter); - ASSERT(curProg.step == curProg.maxStep || errCode); + WARN( curProg.step == curProg.maxStep || errCode, "Filter exited cleanly, but did not reach its maximum step" ); //when completing, we should have full progress std::string progWarn = std::string("Progress did not reach 100\% for filter: "); progWarn+=currentFilter->getUserString(); WARN( (curProg.filterProgress == 100 || errCode),progWarn.c_str()); #endif - //Ensure that (1) yield is called, regardless of what filter does - //(2) yield is called after 100% update + //Ensure that progress is set to 100% after update curProg.filterProgress=100; @@ -1317,22 +1316,22 @@ void FilterTree::stripHazardousContents() { + vector vecFilt; + for(tree::pre_order_iterator it=filters.begin(); - it!=filters.end(); ++it) + it!=filters.end(); ++it) { if ((*it)->canBeHazardous()) { - //delete filters from this branch - for(tree::pre_order_iterator itj(it); itj!=filters.end(); ++itj) - delete *itj; - - //nuke this branch - it=filters.erase(it); - --it; + vecFilt.push_back(*it); } } + + for(unsigned int ui=0;ui &treeInst, @@ -1739,6 +1738,35 @@ } +bool FilterTree::respliceFilter(Filter *toMove, const Filter *newParent) +{ + if(toMove == newParent) + return false; + + //Find the iterator of the filter to move + tree::iterator moveFilterIt=std::find(filters.begin(),filters.end(),toMove); + + Filter* oldParent; + if(depth(moveFilterIt)) + oldParent=*(filters.parent(moveFilterIt)); + else + oldParent= 0; + + //reparent all the children of the move filter + typedef tree::sibling_iterator TREE_SIBIT; + vector moveChildren; + for(TREE_SIBIT it=moveFilterIt.begin(); it!=moveFilterIt.end(); ++it) + moveChildren.push_back(it); + + for(unsigned int ui=0;ui::pre_order_iterator depthBegin() const { return filters.begin();}; //Return iterator to tree contents end tree::pre_order_iterator depthEnd() const { return filters.end();} - //Return depth of a given iterator + //return the maximum depth of the tree size_t maxDepth() const; + //Return depth of a given iterator size_t depth(const tree::pre_order_iterator &it) const ; //Get a reference to the underlying tree @@ -172,7 +173,7 @@ void removeSubtree(Filter *f); //!Add a new filter to the tree. Note that pointer will be released - // by filter destructor + // by filter destructor. Set parent=0 if inserting into base of tree void addFilter(Filter *f, const Filter *parent); //!Add a new tree as a subtree to a node @@ -186,6 +187,12 @@ //!Obtain a copy of the filters from the specified subtree, // including the target filter and its descendants void cloneSubtree(FilterTree &f,const Filter *targetFilt) const; + + //!Move a filter from one point in the tree to another, with the + // parent of the filter being moved adopting all that filters children + // - newParent can be a child of toMove. + bool respliceFilter(Filter *toMove, const Filter *newParent); + //--------- @@ -236,6 +243,11 @@ size_t cacheCount(unsigned int typeMask = STREAMTYPE_MASK_ALL) const; + +#ifdef DEBUG + void print() const ; +#endif + }; #endif diff -Nru 3depict-0.0.19-1/src/backend/plot.cpp 3depict-0.0.20/src/backend/plot.cpp --- 3depict-0.0.19-1/src/backend/plot.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/backend/plot.cpp 2017-01-29 15:47:06.000000000 +0000 @@ -29,7 +29,7 @@ NTRANS("Moving avg.") }; -const char *plotTypeStrings[]= { +const char *traceStyleStrings[]= { NTRANS("Lines"), NTRANS("Bars"), NTRANS("Steps"), @@ -119,15 +119,15 @@ string plotString(unsigned int plotMode) { ASSERT(plotMode< PLOT_TYPE_ENUM_END); - return TRANS(plotTypeStrings[plotMode]); + return TRANS(traceStyleStrings[plotMode]); } unsigned int plotID(const std::string &plotString) { - COMPILE_ASSERT(THREEDEP_ARRAYSIZE(plotTypeStrings) == PLOT_TYPE_ENUM_END); + COMPILE_ASSERT(THREEDEP_ARRAYSIZE(traceStyleStrings) == PLOT_TYPE_ENUM_END); for(unsigned int ui=0;uigetMode(); + ASSERT(visibleMode < PLOT_MODE_ENUM_END); continue; } else @@ -684,6 +685,12 @@ return visibleMode; } +unsigned int PlotWrapper::getPlotMode(unsigned int plotId) const +{ + ASSERT(plotId < plottingData.size()); + return plottingData[plotId]->getPlotMode(); +} + void PlotWrapper::getVisibleIDs(vector &visiblePlotIDs ) const { @@ -791,7 +798,7 @@ if(!plottingData[ui]->visible) continue; - if(plottingData[ui]->getType()!= PLOT_MODE_1D) + if(plottingData[ui]->getMode()!= PLOT_MODE_1D) continue; if(((Plot1D*)plottingData[ui])->wantLogPlot()) @@ -809,7 +816,7 @@ float minYVal=0.1; for(size_t ui=0;uivisible || plottingData[ui]->getType() !=PLOT_MODE_1D) + if(!plottingData[ui]->visible || plottingData[ui]->getMode() !=PLOT_MODE_1D) continue; float tmp ; @@ -929,7 +936,7 @@ Plot2DFunc *curPlot; curPlot=(Plot2DFunc*)plottingData[ui]; - if(curPlot->getType() == PLOT_2D_DENS) + if(curPlot->getMode() == PLOT_2D_DENS) { wantColourbar=true; } @@ -1047,11 +1054,6 @@ plottingData[plotIDHandler.getPos(plotId)]->regionGroup.getRegion(regionId,region); } -unsigned int PlotWrapper::plotType(unsigned int plotId) const -{ - return plottingData[plotIDHandler.getPos(plotId)]->getPlotMode(); -} - void PlotWrapper::moveRegion(unsigned int plotID, unsigned int regionId, bool regionSelfUpdate, unsigned int movementType, float newX, float newY) const @@ -1135,7 +1137,7 @@ void PlotBase::copyBase(PlotBase *target) const { - target->plotType=plotType; + target->traceStyle=traceStyle; target->minX=minX; target->maxX=maxX; target->minY=minY; @@ -1157,36 +1159,27 @@ unsigned int PlotBase::getType() const { - return plotType; + ASSERT(traceStyle < PLOT_TYPE_ENUM_END); + return traceStyle; } unsigned int PlotBase::getMode() const { - switch(plotType) - { - case PLOT_LINE_LINES: - case PLOT_LINE_BARS: - case PLOT_LINE_STEPS: - case PLOT_LINE_STEM: - case PLOT_LINE_POINTS: - return PLOT_MODE_1D; + ASSERT(plotMode < PLOT_MODE_ENUM_END); + return plotMode; - case PLOT_2D_DENS: - case PLOT_2D_SCATTER: - return PLOT_MODE_2D; - } - ASSERT(false); } Plot1D::Plot1D() { //Set the default plot properties - plotType=PLOT_LINE_LINES; + traceStyle=PLOT_LINE_LINES; plotMode=PLOT_MODE_1D; xLabel=""; yLabel=""; title=""; r=(0);g=(0);b=(1); + logarithmic=true; } @@ -1489,7 +1482,7 @@ //Plot the appropriate form - switch(plotMode) + switch(traceStyle) { case PLOT_LINE_LINES: //Unfortunately, when using line plots, mathgl moves the data points to the plot boundary, @@ -1502,15 +1495,18 @@ gr->Error(xDat,yDat,eDat,colourCode.c_str()); gr->SetCut(false); break; - case PLOT_LINE_BARS: - gr->Bars(xDat,yDat,colourCode.c_str()); - break; case PLOT_LINE_STEPS: //Same problem as for line plot. gr->SetCut(true); gr->Step(xDat,yDat,colourCode.c_str()); gr->SetCut(false); break; + case PLOT_LINE_BARS: + //FIXME: Bars mode doesn't work for sparse data. + // This has been fixed in mathgl > 2.3.5.1 + //string sMode = colourCode.c_str() + "F^"; // F^ - centred and fixed size + //gr->Bars(xDat,yDat,colourCode.c_str()); + //break; case PLOT_LINE_STEM: gr->SetCut(true); gr->Stem(xDat,yDat,colourCode.c_str()); @@ -1632,7 +1628,7 @@ Plot2DFunc::Plot2DFunc() { plotMode = PLOT_MODE_2D; - plotType=PLOT_2D_DENS; + traceStyle=PLOT_2D_DENS; } void Plot2DFunc::setData(const Array2D &a, @@ -1705,7 +1701,8 @@ Plot2DScatter::Plot2DScatter() { - plotType=PLOT_2D_SCATTER; + traceStyle=PLOT_2D_SCATTER; + plotMode=PLOT_MODE_2D; scatterIntensityLog=false; } diff -Nru 3depict-0.0.19-1/src/backend/plot.h 3depict-0.0.20/src/backend/plot.h --- 3depict-0.0.19-1/src/backend/plot.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/plot.h 2017-01-29 15:47:06.000000000 +0000 @@ -43,7 +43,7 @@ #undef isnan -//Plot style/mode enum +//Plot trace style enum enum { PLOT_LINE_LINES=0, @@ -57,9 +57,8 @@ PLOT_TYPE_ENUM_END }; -//This is the plot mode, -// it can be determined as a function of the -// plot-style/mode enum +//Plot mode enum, which governs how the axes need to be set +// for this plot type enum { PLOT_MODE_1D, @@ -217,7 +216,7 @@ class PlotBase { protected: - //!Sub type of plot (eg lines, bars for 1D) + //!Type of plot unsigned int plotMode; //!xaxis label std::string xLabel; @@ -229,8 +228,9 @@ //plot colour (for single coloured plots) float r,g,b; - //The type of plot (ie what class is it?) - unsigned int plotType; + //The sub-style of the plot trace (eg lines, points, bars, etc) + // FIXME: This is badly named, change to traceStyle, or dataStyle, or something + unsigned int traceStyle; void copyBase(PlotBase *target) const; @@ -297,8 +297,12 @@ void setStrings(const std::string &x, const std::string &y,const std::string &t); + //Set the colour of the plot trace void setColour(float rNew, float gNew, float bNew); + //set the visual style for the trace (dots, lines, etc) + void setTraceStyle(unsigned int newStyle) { traceStyle=newStyle;} + std::string getXLabel() const { return xLabel;} std::string getTitle() const { return title;} std::string getYLabel() const { return yLabel;} @@ -309,6 +313,7 @@ void setPlotMode(unsigned int newMode) { plotMode= newMode;} + //get the colour of the trace void getColour(float &r, float &g, float &b) const ; #ifdef DEBUG @@ -613,7 +618,7 @@ //!obtain the type of a plot, given the plot's uniqueID - unsigned int plotType(unsigned int plotId) const; + unsigned int getPlotMode(unsigned int plotId) const; //Retrieve the types of visible plots unsigned int getVisibleMode() const; diff -Nru 3depict-0.0.19-1/src/backend/state.cpp 3depict-0.0.20/src/backend/state.cpp --- 3depict-0.0.19-1/src/backend/state.cpp 2016-05-31 00:12:17.000000000 +0000 +++ 3depict-0.0.20/src/backend/state.cpp 2017-01-29 16:01:39.000000000 +0000 @@ -34,19 +34,20 @@ using std::map; using std::endl; //TODO: Remove me? -//FIXME: Global - need to make part of AnalysisState. -// then provide references as needed -//true if modification to state has occurred -int stateModifyLevel=STATE_MODIFIED_NONE; +unsigned int AnalysisState::currentStateWriterVersion=0; -void setStateModifyLevel(int newLevel) + +void AnalysisState::setStateModifyLevel(unsigned int newLevel) { stateModifyLevel=std::max(newLevel,stateModifyLevel); } -int getStateModifyLevel() +unsigned int AnalysisState::getStateModifyLevel() const { - return stateModifyLevel; + unsigned int levelMod; + levelMod=std::max(stateModifyLevel,treeState.getModifyLevel()); + ASSERT(levelMod < STATE_MODIFIED_ENUM_END); + return levelMod; } @@ -58,6 +59,8 @@ savedCameras.push_back(new CameraLookAt); plotLegendEnable=true; + worldAxisMode=0; + stateModifyLevel=STATE_MODIFIED_NONE; rBack=gBack=bBack=0; } @@ -91,6 +94,7 @@ gBack=oth.gBack; bBack=oth.bBack; + stateModifyLevel=oth.stateModifyLevel; worldAxisMode=oth.worldAxisMode; activeCamera=oth.activeCamera; @@ -108,6 +112,10 @@ void AnalysisState::clear() { + //Has the state been modified? + if(treeState.size() || stashedTrees.size()) + setStateModifyLevel(STATE_MODIFIED_DATA); + treeState.clear(); stashedTrees.clear(); @@ -138,8 +146,14 @@ effects.clear(); } + +unsigned int AnalysisState::getStateWriterVersion() +{ + return currentStateWriterVersion; +} + bool AnalysisState::save(const char *cpFilename, std::map &fileMapping, - bool writePackage, bool setStateModifyLevel) const + bool writePackage, bool setStateModifyLevel) { //Open file for output std::ofstream f(cpFilename); @@ -280,7 +294,11 @@ ASSERT(isValidXML(cpFilename)); if(setStateModifyLevel) + { + //reset the current state modification level stateModifyLevel=STATE_MODIFIED_NONE; + treeState.resetModifyLevel(); + } return true; } @@ -390,11 +408,18 @@ errStream << TRANS("State was created by a newer version of this program.. ") << TRANS("file reading will continue, but may fail.") << endl ; } + + + if(!parseVersion(tmpVer,currentStateWriterVersion)) + currentStateWriterVersion=0; + } else { errStream<< TRANS("Warning, unparseable version number in state file. File reading will continue, but may fail") << endl; } + + xmlFree(xmlString); } } @@ -599,12 +624,10 @@ haveCameraAlready=false; for(unsigned int ui=0; uigetUserString() == newCameraVec[ui]->getUserString()) { haveCameraAlready=true; -#ifdef DEBUG - cerr << "Found duplicate camera, ignoring" << endl; - #endif break; } } @@ -794,6 +817,8 @@ nodeStack.pop(); nodeStack.push(nodePtr); + + currentStateWriterVersion=0; } catch (int) { @@ -832,8 +857,9 @@ Camera *c=new CameraLookAt(); savedCameras.push_back(c); - bool defaultSet = false; //spin through + + bool defaultSet = false; for(unsigned int ui=0;ui=savedCameras.size()) + activeCamera=savedCameras.size()-1; fileName=cpFilename; @@ -888,9 +919,16 @@ // state is overwritten setStateModifyLevel(STATE_MODIFIED_NONE); + treeState.resetModifyLevel(); #ifdef DEBUG checkSane(); +#else + //NASTY HACK. After a few attempts, this still doesnt't work + // as it should. If we are not in debug mode, then we should simply + // fix it as best we can + if ( activeCamera >= savedCameras.size()) + activeCamera=0; #endif //Perform sanitisation on results return true; @@ -940,7 +978,7 @@ treeState.clearUndoRedoStacks(); if(f.size()) - treeState.addFilterTree(f,true); + treeState.addFilterTree(f); const vector &newCameraVec = otherState.savedCameras; @@ -1157,7 +1195,9 @@ pair f; copyStashedTree(stashOffset,f); - treeState.addFilterTree(f.second,parentFilter); + size_t filterId; + filterId =treeState.getIdByFilter(parentFilter); + treeState.addFilterTree(f.second,filterId); } void AnalysisState::copyStashedTrees(std::vector > &s) const @@ -1244,6 +1284,15 @@ return false; } + +TreeState::TreeState() +{ + pendingUpdates=false; + wantAbort=false; + stateModifyLevel=STATE_MODIFIED_NONE; +} + + void TreeState::operator=(const TreeState &oth) { #ifdef DEBUG @@ -1263,8 +1312,9 @@ } -void TreeState::addFilter(Filter *f, bool isBase,size_t parentId) +void TreeState::addFilter(Filter *f, size_t parentId) { + bool isBase = (parentId == (size_t)-1); pushUndoStack(); if(!isBase) filterTree.addFilter(f,filterMap[parentId]); @@ -1294,9 +1344,9 @@ filterMap[idToUse] = f; } -void TreeState::addFilterTree(FilterTree &f, bool isBase,size_t parentId) +void TreeState::addFilterTree(FilterTree &f, size_t parentId) { - ASSERT(!(isBase && parentId==(size_t)-1)); + bool isBase = (parentId == (size_t)-1); if(isBase) filterTree.addFilterTree(f,0); @@ -1440,6 +1490,25 @@ return true; } +bool TreeState::respliceFilter(size_t filter, size_t newParent) +{ + //Save current filter state to undo stack + pushUndoStack(); + + //Try to reparent this filter. It might not work, + // eg if parent and filter are the same thing + if(!filterTree.respliceFilter(filterMap[filter],filterMap[newParent])) + { + //Didn't work. Pop the undo stack, to reverse our + //push, but don't restore it, + // as this would cost us our filter caches + popUndoStack(false); + return false; + } + + return true; +} + bool TreeState::setFilterProperty(size_t filterId, unsigned int key, const std::string &value, bool &needUpdate) { @@ -1456,6 +1525,10 @@ // restoring would destroy the cache popUndoStack(false); } + else + { + elevateModifyLevel(STATE_MODIFIED_DATA); + } return setOK; } @@ -1527,13 +1600,14 @@ { //Swap the current filter cache out with the undo stack result filterTree.swap(undoFilterStack.back()); + + elevateModifyLevel(STATE_MODIFIED_DATA); } //Pop the undo stack undoFilterStack.pop_back(); - setStateModifyLevel(STATE_MODIFIED_DATA); } void TreeState::popRedoStack() @@ -1547,7 +1621,7 @@ //Pop the redo stack redoFilterStack.pop_back(); - setStateModifyLevel(STATE_MODIFIED_DATA); + elevateModifyLevel(STATE_MODIFIED_DATA); } void TreeState::applyBindings(const std::vector > &bindings) @@ -1586,6 +1660,7 @@ } + elevateModifyLevel(STATE_MODIFIED_DATA); } void TreeState::applyBindingsToTree() @@ -1603,7 +1678,8 @@ //Clear the modifications to the selection devices for(unsigned int ui=0;uiresetModifiedBindings(); - + + elevateModifyLevel(STATE_MODIFIED_DATA); } @@ -1623,7 +1699,21 @@ return false; } +unsigned int TreeState::getModifyLevel() const +{ + ASSERT(stateModifyLevel < STATE_MODIFIED_ENUM_END); + return stateModifyLevel; +} +void TreeState::elevateModifyLevel(unsigned int newLevel) +{ + stateModifyLevel=std::max(stateModifyLevel,newLevel); +} + +void TreeState::resetModifyLevel() +{ + stateModifyLevel=STATE_MODIFIED_NONE; +} #ifdef DEBUG @@ -1632,6 +1722,7 @@ bool runStateTests() { + //FIXME: There could be a lot more testing here. return testStateReload(); } diff -Nru 3depict-0.0.19-1/src/backend/state.h 3depict-0.0.20/src/backend/state.h --- 3depict-0.0.19-1/src/backend/state.h 2016-05-19 00:39:49.000000000 +0000 +++ 3depict-0.0.20/src/backend/state.h 2017-01-29 14:33:20.000000000 +0000 @@ -38,15 +38,14 @@ bool runStateTests(); #endif -void setStateModifyLevel(int newLevel); -int getStateModifyLevel(); enum { STATE_MODIFIED_NONE=0, STATE_MODIFIED_VIEW, // the 3D view has chaged STATE_MODIFIED_ANCILLARY, //Eg stashes, inactive cameras, and other things that might get saved - STATE_MODIFIED_DATA // actual data output is latered + STATE_MODIFIED_DATA,// actual data output is altered + STATE_MODIFIED_ENUM_END // not a level, just end of enum marker }; @@ -80,8 +79,11 @@ //Do we want to abort the refresh? This is passed to the tree // to signal if the primary thread would like to abort ATOMIC_BOOL wantAbort; + + //How much has the tree been modified since last save? + unsigned int stateModifyLevel; public: - TreeState() {pendingUpdates=false; wantAbort=false;} + TreeState() ; void operator=(const TreeState &otherState); @@ -106,16 +108,17 @@ const FilterTree &getTreeRef() const { return filterTree ;}; - //!Add a new filter to the tree. Set isbase=false and parentID for not - //setting a parent (ie making filter base) - void addFilter(Filter *f, bool isBase, size_t parentId); - - //!Add a new subtree to the tree. Note that the tree will be cleared - // as a result of this operation. Control of all pointers will be handled internally. - // Currently, If you wish to use ::getFilterById you *must* rebuild the tree control with - // ::updateWxTreeCtrl. This should be fixed. - void addFilterTree(FilterTree &f,bool isBase=true, - size_t parentId=(unsigned int)-1); + //!Add a new filter to the tree. parentID == -1 for not + //setting a parent (ie making filter at base of tree) + void addFilter(Filter *f, size_t parentId=(size_t)-1); + + //!Add a new subtree to the tree, optionally specifying a parent filter. + // - Note that the input tree (the one to be added) will be cleared + // as a result of this operation. + // Control of all pointers will be handled internally by this calss. + // - If you wish to use ::getFilterById you *must* rebuild the tree control with + // ::updateWxTreeCtrl. + void addFilterTree(FilterTree &f, size_t parentId=(size_t)-1); //!Grab the filter tree from the internal one, and swap the // internal with a cloned copy of the internal. @@ -144,18 +147,18 @@ //!Return all of a given type of filter from the filter tree. Type must be the exact type of filter - it is not a mask void getFiltersByType(std::vector &filters, unsigned int type) const; - //!Return the number of filters currently in the main tree - size_t numFilters() const { return filterTree.size();}; - //!Clear the cache for the filters void purgeFilterCache() { filterTree.purgeCache();}; //!Delete a filter and all its children void removeFilterSubtree(size_t filterId); - //Move a filter from one part of the tree to another + //Move a filter, and all its children, from one part of the tree to another bool reparentFilter(size_t filterID, size_t newParentID); + //Move a filter from one part of the tree to another, leaving all the children in-place + bool respliceFilter(size_t filterID, size_t newParentID); + //!Set the properties using a key-value result /* * The return code tells whether to reject or accept the change. @@ -213,7 +216,14 @@ //Return the selection devices obtained from the last refresh std::vector &getSelectionDevices() { return selectionDevices;}; - + + + //Increase the current state's modification level, if possible + void elevateModifyLevel(unsigned int newLevel); + //obtain the modification level since last uage + unsigned int getModifyLevel() const; + //Clear the current modification level + void resetModifyLevel(); }; //The underlying data for any given state in the analysis toolchain @@ -267,10 +277,17 @@ //!User-set animation properties PropertyAnimator animationState; - //TODO: Migrte into some state wrapper class with animationState + //TODO: Migrate into some state wrapper class with animationState //Additional state information for animation std::vector > animationPaths; + //FIXME: this should not be static, but should be available to the filters at state read time. + // This variable is only set during a state read + static unsigned int currentStateWriterVersion; + + //To what level has the state been modified since last save, or program start? + unsigned int stateModifyLevel; + bool camNameExists(const std::string &s) const ; //Clear the effect vector @@ -289,6 +306,11 @@ #endif public: + + //This is only valid during a state read, and should only be used by filters + // THis returns the version of the program that wrote the state + static unsigned int getStateWriterVersion(); + TreeState treeState; AnalysisState(); @@ -301,7 +323,11 @@ void operator=(const AnalysisState &oth); - + //To what extent the state has been modified since last save + unsigned int getStateModifyLevel() const; + //Set the extent to which state has been modified since last save + // FIXME: Rename. This can only elevate the state modification level, not decrease it + void setStateModifyLevel(unsigned int newLevel); //Load an XML representation of the analysis state // - returns true on success, false on fail @@ -318,7 +344,7 @@ // - write package says if state should attempt to ensure that output // state is fully self-contained, and locally referenced bool save(const char *cpFilename, std::map &fileMapping, - bool writePackage,bool setModifyLevel=true) const ; + bool writePackage,bool setModifyLevel=true); //Combine a separate state file into this one, avoiding clashes void merge(const AnalysisState &srcState); diff -Nru 3depict-0.0.19-1/src/backend/viscontrol.cpp 3depict-0.0.20/src/backend/viscontrol.cpp --- 3depict-0.0.19-1/src/backend/viscontrol.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/backend/viscontrol.cpp 2017-01-29 14:14:26.000000000 +0000 @@ -55,7 +55,7 @@ bool VisController::stateIsModified(unsigned int minLevel) const { - return state.hasStateData() && getStateModifyLevel(); + return state.hasStateData() && state.getStateModifyLevel(); } void VisController::transferSceneCameraToState() @@ -114,7 +114,7 @@ dataOnly.push_back(t); } - updateScene(dataOnly,false); + updateScene(dataOnly,true); } void VisController::updateScene(list > &sceneData, @@ -133,6 +133,9 @@ targetPlots.clear(true); //Clear, but preserve selection information. + float rBack,gBack,bBack; + state.getBackgroundColour(rBack,gBack,bBack); + scene.setBackgroundColour(rBack,gBack,bBack); //Names for plots vector > plotLabels; @@ -249,7 +252,7 @@ plotData->yLabel,plotData->dataLabel); //set the appearance of the plot - //plotNew->setTraceStyle(plotStyle); + plotNew->setTraceStyle(plotData->plotStyle); plotNew->setColour(plotData->r,plotData->g,plotData->b); @@ -275,7 +278,7 @@ unsigned int plotID; PlotBase *plotNew; - switch(plotData->plotType) + switch(plotData->plotStyle) { case PLOT_2D_DENS: { @@ -352,7 +355,9 @@ //prevent vector destructor from deleting pointers //we have transferred ownership of to scene drawData->drawables.clear(); - deleteIt=true; + + if(releaseData) + deleteIt=true; } break; } @@ -672,7 +677,6 @@ upWxTreeCtrl(state.treeState.getTreeRef(),t, filterMap,persistentFilters,visibleFilt); - cerr << "Rebuilt filter map" < y) || (4 * h < y))) { delete[] ptr; @@ -135,7 +135,7 @@ // use with indices T * operator[](unsigned int index) const { - ASSERT((index>=0) && (index < y)); + ASSERT((index>0) && (index < y)); return ptr[index]; } @@ -193,15 +193,15 @@ data=NULL; } - void unpack(std::vector > &data) const + void unpack(std::vector > &unpackData) const { - data.resize(y); + unpackData.resize(y); #pragma omp parallel for for(unsigned int ui=0;ui=0.0f) + intersectPts.push_back((eEnd-eStart)*v+ eStart); } + + vector killV; + killV.resize(intersectPts.size(),false); + //Eliminate duplicates + //--- + for(unsigned int ui=0;ui 3) + { + //Find the clockwise angle from the first vector (vertex-midpt) + // to all the other vectors + Point3D midPt = Point3D::centroid(intersectPts); + vector > angles; + angles.resize(intersectPts.size()); + Point3D v1= intersectPts[0] - midPt; + v1.normalise(); + angles[0]=std::make_pair(0,0); + for(unsigned int ui=0;ui newPts; + newPts.resize(intersectPts.size()); + for(unsigned int ui=0;ui pts; + b.getPlaneIntersectVertices( + Point3D(0.5,0.5,0.5),Point3D(0,0,1),pts); + + TEST(pts.size() == 4,"plane intersect test"); + for(unsigned int ui=0;ui #include "common/translation.h" +#include "common/assertion.h" + +//4th-order polynomial fitted colour map. Coeffs are in decreasing power (p^n... p^0), and per channel +// so you need [5 + 5 + 5] sized array (R + G + B) +void fittedColorMap(unsigned char *rgb, float value, float min, float max, const float *coeffs); void jetColorMap(unsigned char *rgb,float value,float min,float max) { @@ -191,6 +196,60 @@ rgb[0]=rgb[1]=rgb[2]=(unsigned char)(255*value/max); } + +void infernoColorMap(unsigned char *rgb, float value, float min, float max) +{ + //I have performed a simple parameterised fit + // to the colourmap provided at + // BIDS (github). There is some quality loss in the fit + // https://bids.github.io/colormap/ + //4th-order fit + const float INFERNO_COEFFS[3*5]= { 3.9160e-10, -3.0773e-7, 5.6460e-5, 2.8489e-3, -1.3064e-2 , //Fitted R + -4.8786e-10, 2.6912e-7, -2.9237e-5, 2.0396e-3, -3.5979e-3, // Fitted G + 1.6772e-09, -4.0943e-07 , -3.4314e-05 , 1.0220e-02,-7.5587e-3 }; // Fitted B + fittedColorMap(rgb,value,min,max,INFERNO_COEFFS); +} + + +void viridisColorMap(unsigned char *rgb, float value, float min, float max) +{ + //4th order polynomial fit to viridis. Each row is a different channel (RGB) + const float VIRIDIS_COEFFS[5*3]={ -1.0011e-09,6.8506e-07,-1.1678e-04,4.9495e-03,2.3277e-01, + -2.9027e-10,1.3784e-07,-2.6865e-05,6.2223e-03,1.3762e-03, + 2.2975e-10,-1.0751e-07,-6.6945e-06,3.6694e-03,3.6022e-01}; + + fittedColorMap(rgb,value,min,max,VIRIDIS_COEFFS); +} + +void fittedColorMap(unsigned char *rgb, float value, float min, float max, const float *coeffs) +{ + + //scale value to the 0-255 range + + value= (value - min)/(max-min)*255.0f; + value = std::min(value,255.0f); + value = std::max(value,0.0f); + + const unsigned int FIT_ORDER=5; + + //Compute the fitted RGB + for(unsigned int ui=0;ui<3;ui++) + { + float f; + unsigned int offset = ui*FIT_ORDER; + f= value*value*value*value*coeffs[offset+0] + + value*value*value*coeffs[offset+1] + + value*value*coeffs[offset+2] + + value*coeffs[offset+3] + + coeffs[offset+4]; + f = std::max(f,0.0f); + f = std::min(f,255.0f); + rgb[ui] = f*255.0f; + } + +} + + void colourMapWrap(unsigned int mapID,unsigned char *rgb, float v, float min, float max, bool reverse) @@ -206,30 +265,36 @@ //Select the desired colour map switch(mapID) { - case 0: + case COLOURMAP_JET: jetColorMap(rgb, v, min, max); break; - case 1: + case COLOURMAP_HOT: hotColorMap(rgb, v, min, max); break; - case 2: + case COLOURMAP_COLD: coldColorMap(rgb, v, min, max); break; - case 3: + case COLOURMAP_GRAY: grayColorMap(rgb, v, min, max); break; - case 4: + case COLOURMAP_CYCLIC: cyclicColorMap(rgb, v, min, max); break; - case 5: + case COLOURMAP_GENERAL: colorMap(rgb, v, min, max); break; - case 6: + case COLOURMAP_BLUE: blueColorMap(rgb, v, min, max); break; - case 7: + case COLOURMAP_RAND: randColorMap(rgb, v, min, max); break; + case COLOURMAP_INFERNO: + infernoColorMap(rgb, v, min, max); + break; + case COLOURMAP_VIRIDIS: + viridisColorMap(rgb, v, min, max); + break; } @@ -238,7 +303,7 @@ std::string getColourMapName(unsigned int mapID) { - + ASSERT(mapID < COLOURMAP_ENUM_END); const char *mapNames[] = { NTRANS("Jet"), NTRANS("Hot"), NTRANS("Cold"), @@ -246,9 +311,35 @@ NTRANS("Cyclic"), NTRANS("General"), NTRANS("Blue"), - NTRANS("Pseudo-Random")}; + NTRANS("Pseudo-Random"), + NTRANS("Inferno"), + NTRANS("Viridis")}; return TRANS(mapNames[mapID]); } +#ifdef DEBUG + +bool testColourMap() +{ + //FIXME: More tests + + float v,minV,maxV; + v = 50; + minV=0; + maxV=100; + + unsigned char rgb[3]; + + infernoColorMap(rgb,v,minV,maxV); + + TEST(EQ_TOLV( (float) rgb[0],0.7364*255.0f,2.0),"inferno Red") ; + TEST(EQ_TOLV((float)rgb[1],0.2118*255.0f,2.0f),"inferno Green") ; + TEST(EQ_TOLV((float)rgb[2],0.33004*255.0f,2.0f),"inferno Blue") ; + + return true; +} + +#endif + diff -Nru 3depict-0.0.19-1/src/common/colourmap.h 3depict-0.0.20/src/common/colourmap.h --- 3depict-0.0.19-1/src/common/colourmap.h 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/common/colourmap.h 2017-01-24 22:39:13.000000000 +0000 @@ -21,21 +21,35 @@ #include -const unsigned int NUM_COLOURMAPS=8; + +//List of the available colourmaps +enum +{ + COLOURMAP_JET, + COLOURMAP_HOT, + COLOURMAP_COLD, + COLOURMAP_GRAY, + COLOURMAP_CYCLIC, + COLOURMAP_GENERAL, + COLOURMAP_BLUE, + COLOURMAP_RAND, + COLOURMAP_INFERNO, + COLOURMAP_VIRIDIS, + COLOURMAP_ENUM_END +}; //!get colour for specific map -/* 0 jetColorMap | 5 colorMap - * 1 hotColorMap | 6 blueColorMap - * 2 coldColorMap | 7 randColorMap - * 3 grayColorMap | - * 4 cyclicColorMap | - * - * returns char in 0->255 range - */ +//returns char in 0->255 range void colourMapWrap(unsigned int mapID,unsigned char *rgb, float value, float min,float max,bool reverse); std::string getColourMapName(unsigned int mapID); + +#ifdef DEBUG +//Run the colour map tests +bool testColourMap(); +#endif + #endif diff -Nru 3depict-0.0.19-1/src/common/constants.cpp 3depict-0.0.20/src/common/constants.cpp --- 3depict-0.0.19-1/src/common/constants.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/common/constants.cpp 2017-01-21 12:36:06.000000000 +0000 @@ -26,6 +26,6 @@ //Program name const char *PROGRAM_NAME = "3Depict"; //Program version -const char *PROGRAM_VERSION = "0.0.19"; +const char *PROGRAM_VERSION = "0.0.20"; //Path to font for Default FTGL font const char *FONT_FILE= "FreeSans.ttf"; diff -Nru 3depict-0.0.19-1/src/common/mathfuncs.cpp 3depict-0.0.20/src/common/mathfuncs.cpp --- 3depict-0.0.19-1/src/common/mathfuncs.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/common/mathfuncs.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -235,6 +235,11 @@ return value[0]*value[0] + value[1]*value[1] + value[2]*value[2]; } +float Point3D::mag() const +{ + return sqrtf(sqrMag()); +} + Point3D Point3D::normalise() { float mag = sqrtf(sqrMag()); @@ -301,6 +306,13 @@ #endif } +void Point3D::setISOSpherical(float theta, float phi, float r) +{ + value[0] = r*sin(theta)*cos(phi); + value[1] = r*sin(theta)*sin(phi); + value[2] = r*cos(theta); +} + bool Point3D::orthogonalise(const Point3D &pt) { Point3D crossp; @@ -368,16 +380,20 @@ string tmpStr; tmpStr=stripWhite(str); + //are we using polar notation? + bool polarNotation = (tmpStr[0] == '<' && tmpStr[tmpStr.size()-1] == '>'); //Two strings must be in sync std::string allowableStartChars, allowableEndChars; allowableStartChars="([{<'"; allowableEndChars=")]}>'"; + //Find the start/end chars size_t startPos,endPos; startPos=allowableStartChars.find(tmpStr[0]); endPos=allowableEndChars.find(tmpStr[tmpStr.size()-1]); + //Strip the start/end chars if(startPos !=std::string::npos && endPos != std::string::npos) tmpStr=tmpStr.substr(1,tmpStr.size()-1); @@ -420,8 +436,21 @@ return false; } + if(!polarNotation) + setValueArr(p); + else + { + //r,theta,phi, as users should input + // + //Convert from degrees to radiians + p[1]*=M_PI/180; + p[2]*=M_PI/180; + + //set spherical co-ordinates + setISOSpherical(p[1],p[2],p[0]); + } + - setValueArr(p); return true; } @@ -769,6 +798,14 @@ quat_mult_no_second_a(&temp,rotQuat,&pointQuat); quat_pointmult(point, &temp,rotQuat); } + +//Invert the given quaternion (this for example, can generate the inverse rotation) +void quat_invert(Quaternion *quat) +{ + quat->b=-quat->b; + quat->c=-quat->c; + quat->d=-quat->d; +} //For the table to work, we need the sizeof(size_T) at preprocess time #ifndef SIZEOF_SIZE_T @@ -1024,5 +1061,182 @@ gsl_vector_free(rv); } +float clockwiseAngle(const Point3D &v1, const Point3D &v2,const Point3D &normal) +{ + + //sin(theta) = determinant + // cos(tehta) = |u||v| + float det = normal.dotProd(v1.crossProd(v2)); + float angle= atan2(det,v1.dotProd(v2)); + //shift range to [0,2*PI] + if(angle < 0) + angle +=2.0*M_PI; + return angle; +} + + +Point3D generatePointInTri(const Point3D &origin, + const Point3D &sideV1, const Point3D &sideV2, RandNumGen &rng) +{ + float r, s; + r = rng.genUniformDev(); + s= rng.genUniformDev(); + + if(r+s >=1) + { + //Remap to be inside triangle, as the + // vector sum lies in a parallelogram, but + // not in the triangle + r = 1-r; + s= 1-s; + } + + + return origin + sideV1*r + sideV2*s; + +} + +void scatterPointsInPolygon(const vector &polygon, const Point3D &normal, + float scatterDensity, RandNumGen &rng, vector &result) +{ + ASSERT(polygon.size() > 2); + + //Find the area of the polygon + Point3D centroid; + centroid = Point3D::centroid(polygon); + + //Keep track of the relative area of each triangle, + // and its vectors + vector weights; + vector > triVecs; + weights.resize(polygon.size()); + triVecs.resize(polygon.size()); + + float area=0; + for(unsigned int ui=0;ui::epsilon())) + return; + + //normalise the weight to total area, + // and accumulate + float cumSum=0.0f;; + for(unsigned int ui=0;ui &pts, const Point3D &normal, const Point3D &origin, Quaternion &q) +{ + //Move all points to origin; + for(size_t ui=0;ui::epsilon())) + return; + + //Compute rotation axis + Point3D rotateAxis = normal.crossProd(Point3D(0,0,1)); + rotateAxis.normalise(); + + Point3f ra; + ra.fx=rotateAxis[0]; + ra.fy=rotateAxis[1]; + ra.fz=rotateAxis[2]; + quat_get_rot_quat(&ra,rotateAngle,&q); + + //perform in-place rotation + for(unsigned int ui=0;ui &pts,Quaternion &q) +{ + //perform in-place rotation + for(unsigned int ui=0;ui bool parse(const std::string &str); //!Equality operator @@ -113,6 +120,8 @@ //!overload for array indexing returns |pt|^2 float sqrMag() const; + + float mag() const; //!Apply float->float transformation void sqrt() { for(unsigned int ui=0;ui<3;ui++) value[ui]=sqrtf(value[ui]); } @@ -212,7 +221,7 @@ typedef struct { - float a; + float a; //Real component float b; float c; float d; @@ -248,6 +257,9 @@ //Use previously generated quats from quat_get_rot_quats to rotate a point void quat_rot_apply_quat(Point3f *point, const Quaternion *rotQuat); +//Apply the given quaternion rotation to the input points +void applyQuaternionRotation(std::vector &pts,const Quaternion &q); + //This class implements a Linear Feedback Shift Register (in software) //This is a mathematical construct based upon polynomials over closed natural numbers (N mod p). //This will generate a weakly random digit string, but with guaranteed no duplicates, using O(1) @@ -302,4 +314,22 @@ void rotateByMatrix(const std::vector &vpts, const gsl_matrix *m, std::vector &r); + +//Compute the angle between v1 and v2, clockwise, as looking down normal +float clockwiseAngle(const Point3D &v1, const Point3D &v2,const Point3D &normal); + +//Generate a set of points in a 3D polygon +void scatterPointsInPolygon(const std::vector &polygon, const Point3D &normal, + float scatterDensity, RandNumGen &rng, std::vector &result); + +//rotate (and translate) a set of points around a given origin, in-place. Return the +// quaternion that generated the forwards rotational transformation. +//You can invert it with quat_invert +void rotatePointsToXYPlane(std::vector &pts, const Point3D &normal, + const Point3D &origin, Quaternion &q); + +#ifdef DEBUG +bool testMathfuncs(); +#endif + #endif diff -Nru 3depict-0.0.19-1/src/common/stringFuncs.cpp 3depict-0.0.20/src/common/stringFuncs.cpp --- 3depict-0.0.19-1/src/common/stringFuncs.cpp 2016-05-19 00:06:21.000000000 +0000 +++ 3depict-0.0.20/src/common/stringFuncs.cpp 2017-01-21 11:34:57.000000000 +0000 @@ -27,86 +27,39 @@ std::string getMaxVerStr(const std::vector &verStrings) { - std::vector > > verNum; - std::vector thisVer; - + vector verNumList; //break string up into numeric components for(unsigned int ui=0;ui strVerNum; - strVerNum.clear(); - - // period or hyphen are valid version number separators - splitStrsRef(verStrings[ui].c_str(),".-",strVerNum); + unsigned int verNumber; + if(!parseVersion(verStrings[ui],verNumber)) + continue; - //Check to see if we can interpret the values - for(unsigned int uj=0;uj 1) + unsigned int maxV=0; + unsigned int maxP=(unsigned int)-1; + for(unsigned int ui=0;ui maxV) { - //If the version string has enough digits, check to see if it is the maximum for this digit - if(pos < verNum[ui].second.size() ) - thisMax=std::max(thisMax,verNum[ui].second[pos]); - } - - //Kill off any version numbers that were not - //the max value, or had insufficient numbers - for(unsigned int ui=verNum.size();ui;) - { - ui--; - - if(verNum[ui].second.size() <=pos || - verNum[ui].second[pos] < thisMax ) - { - std::swap(verNum[ui],verNum.back()); - verNum.pop_back(); - } + maxP=ui; + maxV=verNumList[ui]; } - - //move to next number - pos++; } + if(maxP == (unsigned int)-1) + return std::string(""); - //Should contain at least one version (ie the maximum, or multiple copies thereof) - ASSERT(verNum.size()); - + return verStrings[maxP]; +} - return verStrings[verNum[0].first]; +unsigned int getVersionNumber(unsigned int major, unsigned int minor, unsigned int revision) +{ + ASSERT(minor < 100 && revision < 100); + return major*100*100 + minor*100 + revision; } bool isVersionNumberString(const std::string &s) @@ -124,6 +77,43 @@ return true; } +bool parseVersion(const std::string &s, unsigned int &version) +{ + if(!isVersionNumberString(s)) + return false; + + std::vector strVerNum; + + // period or hyphen are valid version number separators + splitStrsRef(s.c_str(),".-",strVerNum); + + + //reverse, so we are parsing from the right-most version number + std::reverse(strVerNum.begin(),strVerNum.end()); + + unsigned int number=0; + + //Check to see if we can interpret the values + unsigned int factor=1; + for(unsigned int uj=0;uj=100) + return false; + number +=(i*factor); + } + + version=number; + + return true; +} bool boolStrDec(const std::string &s, bool &b) { diff -Nru 3depict-0.0.19-1/src/common/stringFuncs.h 3depict-0.0.20/src/common/stringFuncs.h --- 3depict-0.0.19-1/src/common/stringFuncs.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/common/stringFuncs.h 2017-01-21 11:34:57.000000000 +0000 @@ -79,6 +79,11 @@ // version strings are digit and decimal point (.) only std::string getMaxVerStr(const std::vector &verStrings); +//obtain the version number code from major/minor/revision data +unsigned int getVersionNumber(unsigned int major, unsigned int minor, unsigned int revision); +//parse a version string +bool parseVersion(const std::string &s, unsigned int &version); + //!Strip whitespace, (eg tab,space) from either side of a string std::string stripWhite(const std::string &str); diff -Nru 3depict-0.0.19-1/src/common/voxels.cpp 3depict-0.0.20/src/common/voxels.cpp --- 3depict-0.0.19-1/src/common/voxels.cpp 2016-05-30 23:59:06.000000000 +0000 +++ 3depict-0.0.20/src/common/voxels.cpp 2017-01-21 11:37:45.000000000 +0000 @@ -30,202 +30,6 @@ -//Helper function to test if a point lies in a convex polygon. The input points MUST be convex -// - by default this will re-sort the polygon. This is needed to -// ensure convex ordering. If data is already ordered, you can -// safely disable this (angularSort=false).; -bool pointIn2DConvexPoly(float px,float py, - vector > &planarPts2D, bool angularSort=true) -{ - - ASSERT(planarPts2D.size() >=3); - - if(angularSort) - { - //TODO : Optimise me. Probably not required to calculate angles explicitly - - //Find the centre x,y value - float midPx =0; - float midPy =0; - for(size_t ui=1;ui > angles; - angles.resize(planarPts2D.size()); - for(unsigned int ui=0;ui > tmp; - tmp.resize(planarPts2D.size()); - for(size_t ui=0;ui0; - - - //repeat, aborting if any half-plane intersects - size_t nP = planarPts2D.size(); - for(size_t ui=1;ui 0) != positive) - return false; - } - - return true; -} - -//FIXME: This code is unfinished. -template -vector getVoxelIntersectionPoints(const BoundCube &b, const Point3D &p, const Point3D &normal, - const Voxels &vox, unsigned int numRequiredSamples, - vector &samples, vector &interpVal) -{ - vector pts; - b.getPlaneIntersectVertices(p,normal,pts); - - //Dont do anything if there is no intersection - //(should have at least 3 pts to form a plane - if(pts.size() < 3) - return pts; - - - //Now, using the plane points, rotate these into the Z=0 plane - gsl_matrix *m = gsl_matrix_alloc(3,3); - computeRotationMatrix(Point3D(0,0,1), - Point3D(1,0,0),normal,Point3D(1,0,0),m); - - //Now rotate them into the Z=0 plane - vector planarPts; - rotateByMatrix(pts,m,planarPts); - - //Find the 2D bounding box, then generate uniform deviate - // random numbers. Scale these ot fit inside the bbox. - - vector > planarPts2D; - float bounds[2][2]; - bounds[0][0] = std::numeric_limits::max(); //minX - bounds[0][1] = std::numeric_limits::max(); //minY - bounds[1][0] = -std::numeric_limits::max(); //maxX - bounds[1][1] = -std::numeric_limits::max(); //maxY - - for(unsigned int ui=0; ui::epsilon())); - - planarPts2D[ui].first = planarPts[ui][0]; - planarPts2D[ui].second = planarPts[ui][1]; - - bounds[0][0] = std::min(bounds[0][0],planarPts2D[ui].first); - bounds[0][1] = std::min(bounds[0][1],planarPts2D[ui].second); - - bounds[1][0] = std::max(bounds[1][0],planarPts2D[ui].first); - bounds[1][1] = std::max(bounds[1][1],planarPts2D[ui].second); - } - - //Init the random number generator - RandNumGen rng; - rng.initTimer(); - - //compute scaling factors - float ax,ay; - ax = bounds[1][0] - bounds[0][0]; - ay = bounds[1][1] - bounds[0][1]; - - //generate the randomly sampled points - size_t nSample=0; - samples.resize(numRequiredSamples); - while(nSample< numRequiredSamples) - { - float px,py; - px = ax*rng.genUniformDev() + bounds[0][0]; - py = ay*rng.genUniformDev() + bounds[0][0]; - - if(pointIn2DConvexPoly(px,py,planarPts2D)) - { - samples[nSample] = Point3D(px,py,0); - nSample++; - } - } - - - //Transpose the matrix to obtain the inverse transform - // originally rotate from frame to z=0. After transpose, - // will rotate from z=0 to frame - gsl_matrix_transpose(m); - gsl_vector *vRot = gsl_vector_alloc(3); - gsl_vector *vOrig = gsl_vector_alloc(3); - - gsl_vector_set(vOrig,3,0); - for(size_t ui=0;uidata); - } - - gsl_vector_free(vRot); - gsl_vector_free(vOrig); - gsl_matrix_free(m); - - - //Find the interpolated value for each point in the voxel set - interpVal.resize(samples.size()); - for(size_t ui=0;ui @@ -324,6 +128,37 @@ } +bool interpTests() +{ + Voxels v; + v.resize(3,3,4); + v.setBounds(Point3D(0,0,0),Point3D(3,3,4)); + for(unsigned int ui=0;ui<3;ui++) + { + for(unsigned int uj=0;uj<3;uj++) + { + v.setData(ui,uj,0,1); + v.setData(ui,uj,1,0); + v.setData(ui,uj,2,-2); + v.setData(ui,uj,3,-1); + } + } + + + Point3D p(1.5,1.5,0); + const unsigned int NSTEP=30; + for(unsigned int ui=0;ui= -2, "interp test"); + } + + return true; +} + /* bool edgeCountTests() { @@ -362,27 +197,6 @@ } */ -bool pointInPoly() -{ - vector > pts; - //make a square - pts.push_back(make_pair(0,0)); -// pts.push_back(make_pair(0,0.5)); - pts.push_back(make_pair(0,1)); - pts.push_back(make_pair(1,0)); - pts.push_back(make_pair(1,1)); - - //shuffle vertex positions - std::random_shuffle(pts.begin(),pts.end()); - - //Run test - TEST(pointIn2DConvexPoly(0.5,0.5,pts),"Point-in-poly test"); // Inside - TEST(!pointIn2DConvexPoly(1.5,0.5,pts),"Point-in-poly test"); //Outside - TEST(!pointIn2DConvexPoly(1.5,1.5,pts),"Point-in-poly test"); //Diagonal - - return true; -} - bool runVoxelTests() { @@ -391,9 +205,8 @@ TEST(basicTests(),"basic voxel tests"); TEST(simpleMath(), "voxel simple maths"); + TEST(interpTests(), "voxel simple maths"); - TEST(pointInPoly(),"point-in-poly tests"); -// TEST(edgeCountTests(), "voxel edge tests"); return true; } diff -Nru 3depict-0.0.19-1/src/common/voxels.h 3depict-0.0.20/src/common/voxels.h --- 3depict-0.0.19-1/src/common/voxels.h 2016-05-31 00:32:17.000000000 +0000 +++ 3depict-0.0.20/src/common/voxels.h 2016-10-29 20:36:27.000000000 +0000 @@ -129,10 +129,6 @@ //to maxBound Point3D minBound, maxBound; - - - void localPaddedConvolve(long long ui,long long uj, long long uk, - const Voxels &kernel,Voxels &result, unsigned int mode) const; public: //!Constructor. @@ -269,7 +265,7 @@ //!Get the bounding box vertex (min/max) Point3D getMinBounds() const; Point3D getMaxBounds() const; - //Obtain the ounds for a specified axis + //Obtain the bounds for a specified axis void getAxisBounds(size_t axis, float &minV, float &maxV) const; ///! Get the spacing for a unit cell Point3D getPitch() const; @@ -277,6 +273,7 @@ void setBounds(const Point3D &pMin, const Point3D &pMax); //!Get the bounding size void getBounds(Point3D &pMin, Point3D &pMax) const { pMin=minBound;pMax=maxBound;} + void getBounds(BoundCube &bc) const { bc.setBounds(minBound,maxBound);} //!Initialise the voxel storage size_t init(size_t nX,size_t nY,size_t nZ, const BoundCube &bound); @@ -1143,7 +1140,6 @@ T Voxels::getSum(const T &initialValue) const { ASSERT(voxels.size()); - T tmp(initialValue); size_t n=voxels.size(); #pragma omp parallel for reduction(+:tmp) @@ -1398,6 +1394,13 @@ x=(size_t)((p[0]-minBound[0])/(maxBound[0]-minBound[0])*(float)binCount[0]); y=(size_t)((p[1]-minBound[1])/(maxBound[1]-minBound[1])*(float)binCount[1]); z=(size_t)((p[2]-minBound[2])/(maxBound[2]-minBound[2])*(float)binCount[2]); + + if(x == binCount[0]) + x--; + if(y == binCount[1]) + y--; + if(z == binCount[2]) + z--; } template @@ -1599,18 +1602,23 @@ //interpolate data values at cube vertices that surround point. We are coming from below the point // so we are simply extending the field on the upper edge by duplicating values as needed - for(unsigned int ui=0;ui<4;ui++) - { - c[(ui&1)][(ui&2)>>1] = getData( index[0],index[1]+ iPlus[1]*(ui&1),index[2] + iPlus[2]*(ui&2) )*(1-fraction[0]) - + getData(index[0]+iPlus[0],index[1]+ iPlus[1]*(ui&1),index[2] + iPlus[2]*(ui&2)); - } + + float xf = 1-fraction[0]; + + size_t xLow,xHigh; + xLow = index[0]; + xHigh = index[0] + iPlus[0]; + c[0][0] = getData(xLow,index[1],index[2])*xf + getData(xHigh,index[1],index[2])*fraction[0] ; + c[0][1] = getData(xLow,index[1],index[2]+iPlus[2])*xf + getData(xHigh,index[1],index[2]+iPlus[2])*fraction[0] ; + c[1][0] = getData(xLow,index[1]+iPlus[1],index[2])*xf + getData(xHigh,index[1]+iPlus[1],index[2])*fraction[0] ; + c[1][1] = getData(xLow,index[1]+iPlus[1],index[2]+iPlus[2])*xf + getData(xHigh,index[1]+iPlus[1],index[2]+iPlus[2])*fraction[0] ; float c0,c1; c0 = c[0][0]*(1-fraction[1]) + c[1][0]*fraction[1]; c1 = c[0][1]*(1-fraction[1]) + c[1][1]*fraction[1]; - v= c0*(1-fraction[2])*c1; + v= c0*(1-fraction[2])+c1*fraction[2]; } diff -Nru 3depict-0.0.19-1/src/gl/drawables.cpp 3depict-0.0.20/src/gl/drawables.cpp --- 3depict-0.0.19-1/src/gl/drawables.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/gl/drawables.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -290,11 +290,15 @@ //===== -DrawPoint::DrawPoint() : origin(0.0f,0.0f,0.0f), r(1.0f), g(1.0f), b(1.0f), a(1.0f) +DrawPoint::DrawPoint() : origin(0.0f,0.0f,0.0f), r(1.0f), g(1.0f), b(1.0f), a(1.0f),size(1.0f) { } -DrawPoint::DrawPoint(float x, float y, float z) : origin(x,y,z), r(1.0f), g(1.0f), b(1.0f) +DrawPoint::DrawPoint(float x, float y, float z) : origin(x,y,z), r(1.0f), g(1.0f), b(1.0f), size(1.0f) +{ +} + +DrawPoint::DrawPoint(const Point3D &p) : origin(p), r(1.0f), g(1.0f), b(1.0f),size(1.0f) { } @@ -328,8 +332,9 @@ void DrawPoint::draw() const { + glPointSize(size); + glBegin(GL_POINTS); glColor4f(r,g,b,a); - glBegin(GL_POINT); glVertex3fv(origin.getValueArr()); glEnd(); } @@ -350,9 +355,9 @@ return d; } -void DrawVector::getBoundingBox(BoundCube &b) const +void DrawVector::getBoundingBox(BoundCube &box) const { - b.setBounds(origin,vector+origin); + box.setBounds(origin,vector+origin); } void DrawVector::setColour(float rnew, float gnew, float bnew, float anew) @@ -524,9 +529,9 @@ } -void DrawQuad::getBoundingBox(BoundCube &b) const +void DrawQuad::getBoundingBox(BoundCube &box) const { - b.setBounds(vertices,4); + box.setBounds(vertices,4); } void DrawQuad::draw() const @@ -715,6 +720,168 @@ } +void DrawPolygon::setVertices(const vector &p) +{ + vertices = p; +} + + +DrawableObj *DrawPolygon::clone() const +{ + DrawPolygon *d= new DrawPolygon; + d->r=r; + d->g=g; + d->b=b; + d->a=a; + d->vertices=vertices; + d->normal=normal; + + return d; +} + + +void DrawPolygon::setColour(float rN, float gN, float bN, float aN) +{ + r=rN; + g=gN; + b=bN; + a=aN; +} + + +void DrawPolygon::draw() const +{ + switch(drawMode) + { + case POLYGON_DRAW_OUTLINE: + { + glColor4f(r,g,b,a); + glBegin(GL_LINE_LOOP); + + for(unsigned int ui=0;ui 0) + glTranslatef(deltaOrigin[0],deltaOrigin[1],deltaOrigin[2]); + glBegin(GL_TRIANGLES); + for(unsigned int ui=0;ui &p, + std::vector &idx) +{ + ASSERT(p.size() >=3); + pts.swap(p); + idx.swap(triIndices); + + BoundCube bc; + getBoundingBox(bc); + origCentroid=bc.getCentroid(); +} + +void DrawTriangleMesh::getBoundingBox(BoundCube &box) const +{ + if(haveCachedBounds) + { + box=cachedBounds; + return; + } + + cachedBounds.setBounds(pts); + box=cachedBounds; + haveCachedBounds=true; + return; +} + +void DrawTriangleMesh::recomputeParams(const vector &vecs, + const vector &scalars, unsigned int mode) +{ + switch(mode) + { + case DRAW_TRIMESH_BIND_ORIGIN: + { + //FIXME: This is a hack + deltaOrigin=vecs[0]-origCentroid; + break; + } + default: + ASSERT(false); + } +} + DrawSphere::DrawSphere() : radius(1.0f), latSegments(8),longSegments(8) { q=gluNewQuadric(); @@ -742,12 +909,12 @@ return d; } -void DrawSphere::getBoundingBox(BoundCube &b) const +void DrawSphere::getBoundingBox(BoundCube &box) const { for(unsigned int ui=0;ui<3;ui++) { - b.setBound(ui,0,origin[ui] - radius); - b.setBound(ui,1,origin[ui] + radius); + box.setBound(ui,0,origin[ui] - radius); + box.setBound(ui,1,origin[ui] + radius); } } @@ -953,7 +1120,7 @@ a=anew; } -void DrawCylinder::getBoundingBox(BoundCube &b) const +void DrawCylinder::getBoundingBox(BoundCube &box) const { float tmp; @@ -987,7 +1154,7 @@ p[2]= offset+(-direction*0.5+origin); p[3]= -offset+(-direction*0.5+origin); - b.setBounds(p); + box.setBounds(p); } @@ -1009,7 +1176,7 @@ return d; } -void DrawManyPoints::getBoundingBox(BoundCube &b) const +void DrawManyPoints::getBoundingBox(BoundCube &box) const { //Update the cache as needed @@ -1019,7 +1186,7 @@ cachedBounds.setBounds(pts); } - b=cachedBounds; + box=cachedBounds; return; } @@ -1127,9 +1294,9 @@ void DrawDispList::addDrawable(const DrawableObj *d) { ASSERT(listActive); - BoundCube b; - d->getBoundingBox(b); - boundBox.expand(b); + BoundCube box; + d->getBoundingBox(box); + boundBox.expand(box); d->draw(); } @@ -1462,7 +1629,7 @@ a=anew; } -void DrawGLText::getBoundingBox(BoundCube &b) const +void DrawGLText::getBoundingBox(BoundCube &box) const { //Box forwards transformations // * Translation by [origin-textDir* (maxx - minx)] @@ -1478,10 +1645,10 @@ float dy=maxY-minY; - b.setBounds(minX,minY,minZ, + box.setBounds(minX,minY,minZ, maxX,maxY,maxZ); vector p; - b.getVertices(p,true); + box.getVertices(p,true); for(size_t ui=0;uigetMinBounds(),field->getMaxBounds()); + box.setBounds(field->getMinBounds(),field->getMaxBounds()); } @@ -2543,7 +2712,7 @@ void DrawField3D::setMapColours(unsigned int mapID) { - ASSERT(mapID < NUM_COLOURMAPS); + ASSERT(mapID < COLOURMAP_ENUM_END); colourMapID= mapID; } @@ -2595,15 +2764,15 @@ } -void DrawIsoSurface::getBoundingBox(BoundCube &b) const +void DrawIsoSurface::getBoundingBox(BoundCube &box) const { if(voxels) { - b.setBounds(voxels->getMinBounds(), + box.setBounds(voxels->getMinBounds(), voxels->getMaxBounds()); } else - b.setInverseLimits(); + box.setInverseLimits(); } @@ -2841,9 +3010,9 @@ glPopMatrix(); } -void DrawAxis::getBoundingBox(BoundCube &b) const +void DrawAxis::getBoundingBox(BoundCube &cube) const { - b.setInvalid(); + cube.setInvalid(); } Draw2DCircle::Draw2DCircle() @@ -2897,10 +3066,10 @@ } } -void Draw2DCircle::getBoundingBox(BoundCube &b) const +void Draw2DCircle::getBoundingBox(BoundCube &cube) const { - b.setBounds(centre[0]-radius, centre[1]-radius, + cube.setBounds(centre[0]-radius, centre[1]-radius, centre[0]+radius, centre[1]+radius, 0,0); } diff -Nru 3depict-0.0.19-1/src/gl/drawables.h 3depict-0.0.20/src/gl/drawables.h --- 3depict-0.0.19-1/src/gl/drawables.h 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/gl/drawables.h 2016-10-29 20:36:27.000000000 +0000 @@ -81,6 +81,21 @@ AXIS_IN_SPACE }; + +//!Polygon drawing styles +enum +{ + POLYGON_DRAW_OUTLINE, + POLYGON_DRAW_ENUM_END +}; + +//!Triangle mesh drawing styles +enum +{ + TRIMESH_DRAW_SURF, + TRIMESH_DRAW_ENUM_END +}; + //!Drawable types enum { @@ -89,6 +104,7 @@ DRAW_TYPE_VECTOR, DRAW_TYPE_TRIANGLE, DRAW_TYPE_QUAD, + DRAW_TYPE_POLYGON, DRAW_TYPE_SPHERE, DRAW_TYPE_CYLINDER, DRAW_TYPE_DISPLAYLIST, @@ -103,6 +119,7 @@ DRAW_TYPE_AXIS, DRAW_TYPE_LEGENDOVERLAY, DRAW_TYPE_PROGRESSCIRCLE_OVERLAY, + DRAW_TYPE_TRIANGLE_MESH, }; //TODO: It seems unnecessary to have multiple types for the bind @@ -127,9 +144,20 @@ DRAW_QUAD_BIND_ORIGIN, //DRAW_TEXT_BIND_TEXTDIR, //FIXME: Implement me for annotation todo. //DRAW_TEXT_BIND_UPDIR, + DRAW_TRIMESH_BIND_ORIGIN, DRAW_BIND_ENUM_END }; +struct RGBFloat +{ + float v[3]; +}; + +struct TRI_IDX +{ + size_t idx[3]; + RGBFloat col[3]; +}; @@ -233,11 +261,15 @@ Point3D origin; //!Point colour (r,g,b,a) range: [0.0f,1.0f] float r,g,b,a; + //!Size of point + float size; public: //!Constructor DrawPoint(); - //!Constructor that takes in positional argments + //!Constructor that takes in positional augments DrawPoint(float,float,float); + //!Constructor that takes in positional augments + DrawPoint(const Point3D &p); //!Destructor virtual ~DrawPoint(); @@ -249,9 +281,13 @@ void setColour(float r, float g, float b, float alpha); //!Draws the points void draw() const; - //!Sets the location of the poitns + //!Sets the location of the point void setOrigin(const Point3D &); + //!Set the size of the point + void setSize(float s) { size=s;} + + void getBoundingBox(BoundCube &b) const { b.setInvalid();}; Point3D getCentroid() const{ return origin;} @@ -509,6 +545,91 @@ void setUseColouring(bool useColouring) {noColour= !useColouring;}; }; +//Draw an irregular 2D n-gon in 3D. +class DrawPolygon : public DrawableObj +{ + protected: + //!Vertices of the quad + vector vertices; + + //!Colour data for the quad + //!The lighting normal of the triangle + /*! Lighting for this class is per triangle only no + * per vertex lighting */ + Point3D normal; + //!Colours of polygon (rgba colour model) + float r,g,b,a; + //!The drawings style to use (eg filled, outline etc) + unsigned int drawMode; + public: + //!Constructor + DrawPolygon() {drawMode=POLYGON_DRAW_OUTLINE;}; + //!Destructor + virtual ~DrawPolygon() {}; + + virtual DrawableObj *clone() const; + + virtual unsigned int getType() const {return DRAW_TYPE_POLYGON;}; + + //!Get bounding cube + virtual void getBoundingBox(BoundCube &b) const ; + + void setVertices(const vector &p); + //!Set the colour of all vertices + void setColour(float r, float g, float b, float a); + + //!Draw the triangle + void draw() const; + + //!Gets the arrow axis direction + Point3D getOrigin() const; + +}; + + +//Coloured triangle mesh +class DrawTriangleMesh : public DrawableObj +{ + protected: + //!Vector of points to draw + std::vector pts; + //!Indices of triangle vertices + std::vector triIndices; + + //FIXME: Redo some of the selection code, so we don't need + // this + Point3D origCentroid,deltaOrigin; + + bool drawDoubleSided; + //If true, draw the mesh edges in addition to the + // coloured triangles + bool drawMeshEdges; + unsigned int drawMode; + + mutable bool haveCachedBounds; + mutable BoundCube cachedBounds; + public: + DrawTriangleMesh(); + ~DrawTriangleMesh(); + + //Assign the triangle data - note this destroys the input data + void setData(std::vector &pts, + std::vector &idx); + + //Set whether the edges of the triangle should be drawn + void setDrawMeshEdges(bool doDraw=true) { drawMeshEdges=true;} + + unsigned int getType() const {return DRAW_TYPE_TRIANGLE_MESH;} + + //!Draws the triangle mesh + void draw() const; + + //!Get the bounding box that encapulates this object + void getBoundingBox(BoundCube &b) const ; + + //!Recompute the internal parameters using the input vector information + void recomputeParams(const std::vector &vecs, const std::vector &scalars, unsigned int mode); +}; //!A sphere drawing @@ -857,10 +978,6 @@ void recomputeParams(const std::vector &vecs, const std::vector &scalars, unsigned int mode); }; -struct RGBFloat -{ - float v[3]; -}; //Abstract class as base for overlays class DrawableOverlay : public DrawableObj @@ -1244,7 +1361,7 @@ virtual void draw() const; void setCentre(float fx,float fy) { centre[0] = fx; centre[1]= fy;}; - void setRadius(float r) { radius=r;} + void setRadius(float rad) { radius=rad;} //Angular step in radiians void setAngularStep(float da) { angularStep = da;}; diff -Nru 3depict-0.0.19-1/src/gl/isoSurface.cpp 3depict-0.0.20/src/gl/isoSurface.cpp --- 3depict-0.0.19-1/src/gl/isoSurface.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/gl/isoSurface.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -515,7 +515,7 @@ { for(size_t iZ = 0; iZ < nz-1; iZ++) { - iEdgeFlags=iFlagIndex=0; + iFlagIndex=0; Point3D position; //Lower left corner of cell for dual grid position=v.getPoint(iX,iY,iZ) + gridSpacing*0.5; diff -Nru 3depict-0.0.19-1/src/gl/tr.cpp 3depict-0.0.20/src/gl/tr.cpp --- 3depict-0.0.19-1/src/gl/tr.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/gl/tr.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -305,7 +305,7 @@ GLdouble zNear, GLdouble zFar ) { GLdouble xmin, xmax, ymin, ymax; - ymax = zNear * tan(fovy * 3.14159265 / 360.0); + ymax = zNear * tan(fovy * M_PI / 360.0); ymin = -ymax; xmin = ymin * aspect; xmax = ymax * aspect; diff -Nru 3depict-0.0.19-1/src/gui/dialogs/animateFilterDialog.cpp 3depict-0.0.20/src/gui/dialogs/animateFilterDialog.cpp --- 3depict-0.0.19-1/src/gui/dialogs/animateFilterDialog.cpp 2016-05-24 01:12:56.000000000 +0000 +++ 3depict-0.0.20/src/gui/dialogs/animateFilterDialog.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -220,7 +220,6 @@ //-- set up the default properties for dialog back-end data //Plot check status - wantPlotOutput=checkPlotData->IsChecked(); wantImageOutput=checkImageOutput->IsChecked(); wantIonOutput=checkPoints->IsChecked(); wantPlotOutput=checkPlotData->IsChecked(); diff -Nru 3depict-0.0.19-1/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h 3depict-0.0.20/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h --- 3depict-0.0.19-1/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h 2016-05-19 00:06:21.000000000 +0000 +++ 3depict-0.0.20/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h 2017-01-21 11:37:58.000000000 +0000 @@ -167,6 +167,7 @@ buttonOK = new wxButton(this, wxID_OK, wxEmptyString); startFrameOK=endFrameOK=startValueOK=endValueOK=false; + buttonOK->Enable(false); const int DEFAULT_TRANSITION=TRANSITION_INTERP; comboTransition->SetSelection(DEFAULT_TRANSITION); diff -Nru 3depict-0.0.19-1/src/gui/dialogs/ExportRngDialog.cpp 3depict-0.0.20/src/gui/dialogs/ExportRngDialog.cpp --- 3depict-0.0.19-1/src/gui/dialogs/ExportRngDialog.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/gui/dialogs/ExportRngDialog.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -237,7 +237,7 @@ itemIndex=listRanges->InsertItem(0, (rangeData->getUserString())); unsigned int nIons,nRngs; nIons = rangeData->getRange().getNumIons(); - nRngs = rangeData->getRange().getNumIons(); + nRngs = rangeData->getRange().getNumRanges(); stream_cast(tmpStr,nIons); listRanges->SetItem(itemIndex, 1, (tmpStr)); diff -Nru 3depict-0.0.19-1/src/gui/dialogs/resolutionDialog.cpp 3depict-0.0.20/src/gui/dialogs/resolutionDialog.cpp --- 3depict-0.0.19-1/src/gui/dialogs/resolutionDialog.cpp 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/gui/dialogs/resolutionDialog.cpp 2017-01-27 00:34:59.000000000 +0000 @@ -353,7 +353,7 @@ widthTextSizer->Add(textWidth, 0, wxALL|wxALIGN_CENTER_VERTICAL, 8); leftSizer->Add(widthTextSizer, 1, wxEXPAND, 0); heightTextSizer->Add(labelHeight, 0, wxALIGN_CENTER_VERTICAL, 0); - heightTextSizer->Add(textHeight, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); + heightTextSizer->Add(textHeight, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); leftSizer->Add(heightTextSizer, 1, wxEXPAND, 0); leftSizer->Add(20, 20, 2, 0, 0); upperSizer->Add(leftSizer, 0, wxLEFT|wxEXPAND, 8); diff -Nru 3depict-0.0.19-1/src/gui/mainFrame.cpp 3depict-0.0.20/src/gui/mainFrame.cpp --- 3depict-0.0.19-1/src/gui/mainFrame.cpp 2016-05-23 15:57:53.000000000 +0000 +++ 3depict-0.0.20/src/gui/mainFrame.cpp 2017-01-29 15:47:06.000000000 +0000 @@ -258,6 +258,7 @@ ID_GRID_FILTER_PROPERTY, ID_LIST_FILTER, ID_TREE_FILTERS, + ID_TREE_DELETE_FILTER_ITEM, ID_BUTTON_REFRESH, ID_BTN_EXPAND, ID_BTN_COLLAPSE, @@ -305,6 +306,7 @@ FILE_OPEN_TYPE_POS=4, FILE_OPEN_TYPE_TEXT=8, FILE_OPEN_TYPE_LAWATAP_ATO=16, + FILE_OPEN_TYPE_3DAP_OPS=32, }; @@ -906,6 +908,7 @@ EVT_TREE_SEL_CHANGED(ID_TREE_FILTERS, MainWindowFrame::OnTreeSelectionChange) EVT_TREE_DELETE_ITEM(ID_TREE_FILTERS, MainWindowFrame::OnTreeDeleteItem) EVT_TREE_BEGIN_DRAG(ID_TREE_FILTERS, MainWindowFrame::OnTreeBeginDrag) + EVT_CONTEXT_MENU(MainWindowFrame::OnTreeRightClick) EVT_BUTTON(ID_BTN_EXPAND, MainWindowFrame::OnBtnExpandTree) EVT_BUTTON(ID_BTN_COLLAPSE, MainWindowFrame::OnBtnCollapseTree) EVT_BUTTON(ID_BTN_FILTERTREE_ERRS, MainWindowFrame::OnBtnFilterTreeErrs) @@ -1026,6 +1029,9 @@ if( extStr == std::string("ato")) return FILE_OPEN_TYPE_LAWATAP_ATO; + + if( extStr == std::string("ops")) + return FILE_OPEN_TYPE_3DAP_OPS; return FILE_OPEN_TYPE_UNKNOWN; } @@ -1070,12 +1076,13 @@ ASSERT(!refreshThreadActive()); vector > validTypes; - validTypes.push_back( make_pair(TRANS("Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)"), - "*.xml;*XML;*.pos;*,POS;*.txt;*.TXT;*.csv;*.CSV;*.ato;*.ATO") ); + validTypes.push_back( make_pair(TRANS("Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)"), + "*.xml;*XML;*.pos;*,POS;*.txt;*.TXT;*.csv;*.CSV;*.ato;*.ATO;*.ops;*.OPS") ); validTypes.push_back( make_pair(TRANS("XML State File (*.xml)"),"*.xml;*.XML")); validTypes.push_back( make_pair(TRANS("POS File (*.pos)"),"*.pos;*.POS")); validTypes.push_back( make_pair(TRANS("LAWATAP ATO File (*.ato)"),"*.ato;*.ATO")); validTypes.push_back( make_pair(TRANS("Text File (*.txt, *.csv)"),"*.csv;*.txt;*.CSV;*.TXT")); + validTypes.push_back( make_pair(TRANS("3Dap Files (*.ops)"),"*.ops")); validTypes.push_back( make_pair(TRANS("All Files (*)"),"*")); std::string totalStr; @@ -1218,7 +1225,7 @@ //Add the filter, using the seelcted // item as the parent - visControl.state.treeState.addFilter(f,false,filterId); + visControl.state.treeState.addFilter(f,filterId); //update the tree control updateWxTreeCtrl(treeFilters); @@ -1364,12 +1371,20 @@ //Bastardise the default settings such that it knows to use the correct // file type, based upon file extension unsigned int fileMode; - if(fileType == FILE_OPEN_TYPE_TEXT) - fileMode=DATALOAD_TEXT_FILE; - else if(fileType == FILE_OPEN_TYPE_LAWATAP_ATO) - fileMode=DATALOAD_LAWATAP_ATO_FILE; - else - fileMode=DATALOAD_FLOAT_FILE; + switch(fileType) + { + case FILE_OPEN_TYPE_TEXT: + fileMode=DATALOAD_TEXT_FILE; + break; + case FILE_OPEN_TYPE_LAWATAP_ATO: + fileMode=DATALOAD_LAWATAP_ATO_FILE; + break; + case FILE_OPEN_TYPE_3DAP_OPS: + fileMode=DATALOAD_THREEDAP_OPS_FILE; + break; + default: + fileMode=DATALOAD_FLOAT_FILE; + } ((DataLoadFilter*)posFilter)->setFileMode(fileMode); ((DataLoadFilter*)posFilter)->setFilename(dataFile); @@ -1384,14 +1399,14 @@ //Append a new filter to the filter tree fTree.addFilter(posFilter,0); - visControl.state.treeState.addFilterTree(fTree,true,0); + visControl.state.treeState.addFilterTree(fTree); } updateWxTreeCtrl(treeFilters); if(!noUpdate) - return doSceneUpdate(true); + doSceneUpdate(true); return true; } @@ -1873,6 +1888,9 @@ // - order of operations for initing the export dialog is important // Getting/Setting animation state requires the filtertree to // be under exportDialog's control + + //A safer alternative would be to create a copy of the filter tree, + // then execute that. FilterTree treeWithCache; //Steal the filter tree, and give the pointer to the export dialog // viscontrol now has an empty tree, so watch out. @@ -1907,6 +1925,7 @@ //restore the cache to viscontrol visControl.state.treeState.swapFilterTree(treeWithCache); + visControl.state.setAnimationState(propAnim,pathMap); } @@ -2157,7 +2176,7 @@ break; } - //Clean up date from this run, releasing stream pointers. + //Clean up data from this run, releasing stream pointers. FilterTree::safeDeleteFilterList(outData); outStreams.clear(); @@ -2380,7 +2399,6 @@ //drop them back into the export dialog. do { - cerr << "Show dialog" << __FILE__ << " :" << __LINE__ << endl; //Show, then check for user cancelling export dialog if(exportDialog->ShowModal() == wxID_CANCEL) { @@ -2773,8 +2791,18 @@ //Change the colour c=colDg->GetColourData().GetColour(); - //Scale colour ranges to 0-> 1 and set in the gl pane - panelTop->setGlClearColour(c.Red()/255.0f,c.Green()/255.0f,c.Blue()/255.0f); + float f[3]; + f[0] = c.Red()/255.0f; + f[1] = c.Green()/255.0f; + f[2] = c.Blue()/255.0f; + //Scale colour ranges to 0-> 1 and + // set in the program state + visControl.state.setBackgroundColour(f[0],f[1],f[2]); + + //The scene won't catch that until the next refresh, when + // state is synced to scene, so fix it by hand + visControl.scene.setBackgroundColour(f[0],f[1],f[2]); + visControl.scene.draw(); } panelTop->forceRedraw(); @@ -3098,10 +3126,13 @@ { visControl.setWxTreeFilterViewPersistence(sId); visControl.setWxTreeFilterViewPersistence(pId); - //If command button down (ctrl or clover on mac), - //then copy, otherwise move + //If : command button down (ctrl or clover on mac),then copy, + // : Shift down -> move, excluding children (splice) + // otherwise move if(wxm.CmdDown()) needRefresh=visControl.state.treeState.copyFilter(sId,pId); + else if(wxm.ShiftDown()) + needRefresh=visControl.state.treeState.respliceFilter(sId,pId); else needRefresh=visControl.state.treeState.reparentFilter(sId,pId); } @@ -3116,6 +3147,8 @@ { if(wxm.CmdDown()) needRefresh=visControl.state.treeState.copyFilter(sId,0); + else if(wxm.ShiftDown()) + needRefresh=visControl.state.treeState.respliceFilter(sId,0); else needRefresh=visControl.state.treeState.reparentFilter(sId,0); } @@ -3167,6 +3200,60 @@ panelTop->forceRedraw(); } +void MainWindowFrame::OnTreeRightClick(wxContextMenuEvent &event) +{ + + if(event.GetEventObject() != treeFilters) + return; + + //There seems to be some problem with picking the zero position + // event.GetPosition() seems to return screen coordinates + // treeFilter->GetPosition returns something else, but not its own coordinates. Maybe parent, minus the zero position for the window??? + wxPoint clickPosition = treeFilters->ScreenToClient(event.GetPosition()); + + wxTreeItemId selectedItem; + if(clickPosition == wxDefaultPosition) + { + //Not generated by click, but by eg keyboard + //Do nothing + } + else + { + int positionHint; + selectedItem = treeFilters->HitTest(clickPosition,positionHint); + + //No item under cursor + if(!selectedItem.IsOk()) + return; + + //Generated by click + treeFilters->SetFocusedItem(selectedItem); + } + + + wxMenu *popupMenu = new wxMenu; + popupMenu->Append(ID_TREE_DELETE_FILTER_ITEM, + TRANS("Delete\tDel"),TRANS("Delete the selected filter")); + + popupMenu->Connect(wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MainWindowFrame::OnTreePopupMenu), NULL, this); + PopupMenu(popupMenu); +} + +void MainWindowFrame::OnTreePopupMenu(wxCommandEvent &event) +{ + switch(event.GetId()) { + case ID_TREE_DELETE_FILTER_ITEM: + { + wxTreeItemId tid = treeFilters->GetSelection(); + deleteTreeFilter(tid); + break; + } + default: + ; //Do nothing + + } +} void MainWindowFrame::updateEditRangeMenu() { @@ -3189,7 +3276,8 @@ return; } //This event is only generated programatically, - // we do not have to handle the direct deletion. + // using the keydown event. + // We do not have to handle the direct deletion. } @@ -3260,9 +3348,9 @@ event.Allow(); #ifdef __APPLE__ - statusMessage(TRANS("Moving - Hold ⌘ (command) to copy"),MESSAGE_HINT); + statusMessage(TRANS("Moving - Hold ⌘ (command) to copy, shift to splice"),MESSAGE_HINT); #else - statusMessage(TRANS("Moving - Hold control to copy"),MESSAGE_HINT); + statusMessage(TRANS("Moving - Hold control to copy, shift to splice"),MESSAGE_HINT); #endif } @@ -3353,51 +3441,7 @@ return; - //TODO: Refactor out wxTreeItem... code, into separate routine - // that only spits out viscontrol Ids - //Rebuild the tree control, ensuring that the parent is visible, - //if it has a parent (recall root node of wx control is hidden) - - //Get the parent & its data - wxTreeItemId parent = treeFilters->GetItemParent(id); - wxTreeItemData *parentData=treeFilters->GetItemData(parent); - - - //Tree data contains unique identifier for vis control to do matching - wxTreeItemData *tData=treeFilters->GetItemData(id); - //Remove the item from the Tree - visControl.state.treeState.removeFilterSubtree(((wxTreeUint *)tData)->value); - //Clear property grid - gridFilterPropGroup->Clear(); - if(parent !=treeFilters->GetRootItem()) - { - ASSERT(parent.IsOk()); // should be - base node should always exist. - - //Ensure that the parent stays visible - visControl.setWxTreeFilterViewPersistence( - ((wxTreeUint*)parentData)->value); - updateWxTreeCtrl(treeFilters); - - - //OK, so those old Id s are no longer valid, - //as we just rebuilt the tree. We need new ones - //Parent is now selected - parent=treeFilters->GetSelection(); - parentData=treeFilters->GetItemData(parent); - - - //Update the filter property grid with the parent's data - visControl.updateFilterPropGrid(gridFilterPropGroup, - ((wxTreeUint *)parentData)->value); - } - else - { - if(parent.IsOk()) - updateWxTreeCtrl(treeFilters); - } - - //Force a scene update, independent of if autoUpdate is enabled. - doSceneUpdate(); + deleteTreeFilter(id); break; } default: @@ -3405,6 +3449,54 @@ } } +void MainWindowFrame::deleteTreeFilter(wxTreeItemId &id) +{ + //TODO: Refactor out wxTreeItem... code, into separate routine + // that only spits out viscontrol Ids + //Rebuild the tree control, ensuring that the parent is visible, + //if it has a parent (recall root node of wx control is hidden) + + //Get the parent & its data + wxTreeItemId parent = treeFilters->GetItemParent(id); + wxTreeItemData *parentData=treeFilters->GetItemData(parent); + + + //Tree data contains unique identifier for vis control to do matching + wxTreeItemData *tData=treeFilters->GetItemData(id); + //Remove the item from the Tree + visControl.state.treeState.removeFilterSubtree(((wxTreeUint *)tData)->value); + //Clear property grid + gridFilterPropGroup->Clear(); + if(parent !=treeFilters->GetRootItem()) + { + ASSERT(parent.IsOk()); // should be - base node should always exist. + + //Ensure that the parent stays visible + visControl.setWxTreeFilterViewPersistence( + ((wxTreeUint*)parentData)->value); + updateWxTreeCtrl(treeFilters); + + + //OK, so those old Id s are no longer valid, + //as we just rebuilt the tree. We need new ones + //Parent is now selected + parent=treeFilters->GetSelection(); + parentData=treeFilters->GetItemData(parent); + + + //Update the filter property grid with the parent's data + visControl.updateFilterPropGrid(gridFilterPropGroup, + ((wxTreeUint *)parentData)->value); + } + else + { + if(parent.IsOk()) + updateWxTreeCtrl(treeFilters); + } + + //Force a scene update, independent of if autoUpdate is enabled. + doSceneUpdate(); +} void MainWindowFrame::OnGridFilterPropertyChange(wxPropertyGridEvent &event) { @@ -3815,7 +3907,7 @@ } //Add the filter to viscontrol - visControl.state.treeState.addFilter(f,false,filterId); + visControl.state.treeState.addFilter(f,filterId); //Rebuild tree control updateWxTreeCtrl(treeFilters,f); @@ -3834,7 +3926,7 @@ } -bool MainWindowFrame::doSceneUpdate(bool ensureVisible) +void MainWindowFrame::doSceneUpdate(bool ensureVisible) { //Update scene ASSERT(!currentlyUpdatingScene); @@ -3864,6 +3956,11 @@ ensureResultVisible=ensureVisible; ASSERT(!refreshControl); + + //Hack to prevent crash on double-refresh + if(refreshControl) + return; + refreshControl = new RefreshController(visControl.state.treeState); refreshThread=new RefreshThread(this,refreshControl); progressTimer->Start(PROGRESS_TIMER_DELAY); @@ -3871,7 +3968,8 @@ refreshThread->Create(); refreshThread->Run(); - return true; + cerr << "Updating scene complete"<< endl; + return; } void MainWindowFrame::updateWxTreeCtrl( wxTreeCtrl *t, const Filter *f) @@ -3971,6 +4069,11 @@ ASSERT(!visControl.state.treeState.isRefreshing()); progressTimer->Stop(); + //Hack to prevent crash on re-entry during refresh. Should never trigger. + if(!refreshControl) + return; + + vector > consoleMessages; consoleMessages=refreshControl->getConsoleMessages(); @@ -4696,6 +4799,7 @@ wxMouseState wxm = wxGetMouseState(); if(wxm.ShiftDown()) { + //If the user presses shift, then delete the filter's caches visControl.state.treeState.purgeFilterCache(); } else @@ -4944,9 +5048,7 @@ { if(!haveAborted) { - refreshThread->abort(); - haveAborted=true; - + visControl.state.treeState.setAbort(); statusMessage(TRANS("Aborting..."),MESSAGE_INFO); return; } @@ -5432,12 +5534,15 @@ textConsoleOut->Clear(); bool loadedOK=false; - //Load them up as data. + //Load the command line files, merging all into the first for(unsigned int ui=0;uiSetToolTip(TRANS("List of available filters")); #ifdef __APPLE__ - treeFilters->SetToolTip(TRANS("Tree - drag to move items, hold ⌘ for copy. Tap delete to remove items")); + treeFilters->SetToolTip(TRANS("Tree - drag to move items, hold ⌘ for copy, shift for splice. Tap delete to remove items, multi-click to rename")); #else - treeFilters->SetToolTip(TRANS("Tree - drag to move items, hold Ctrl for copy. Tap delete to remove items.")); + treeFilters->SetToolTip(TRANS("Tree - drag to move items, hold Ctrl for copy, shift for splice. Tap delete to remove items, multi-click to rename.")); #endif checkAutoUpdate->SetToolTip(TRANS("Enable/Disable automatic updates of data when filter change takes effect")); checkAutoUpdate->SetValue(true); diff -Nru 3depict-0.0.19-1/src/gui/mainFrame.h 3depict-0.0.20/src/gui/mainFrame.h --- 3depict-0.0.19-1/src/gui/mainFrame.h 2016-05-16 23:53:12.000000000 +0000 +++ 3depict-0.0.20/src/gui/mainFrame.h 2017-01-21 11:37:55.000000000 +0000 @@ -112,7 +112,9 @@ void do_filtergrid_prop_layout(); //Force a re-layout of the camera property grid void do_cameragrid_prop_layout(); - + //Delete the tree filters, updating the remaining code as required + void deleteTreeFilter(wxTreeItemId &id); + bool refreshThreadActive() { return refreshThread && refreshThread->IsRunning();}; //!Queue up a status message for display @@ -124,7 +126,7 @@ //!Update the progress information in the status bar void updateProgressStatus(); //!Perform an update to the 3D Scene. Returns false if refresh failed - bool doSceneUpdate(bool ensureResultVisible=false); + void doSceneUpdate(bool ensureResultVisible=false); //!Complete the scene update. Returns false if failed void finishSceneUpdate(unsigned int errCode); @@ -430,6 +432,8 @@ void OnTreeBeginLabelEdit(wxTreeEvent &evt); void OnTreeEndLabelEdit(wxTreeEvent &evt); + void OnTreeRightClick(wxContextMenuEvent &evt); + void OnTreePopupMenu(wxCommandEvent &evt); void OnUpdateTimer(wxTimerEvent &evt); void OnAutosaveTimer(wxTimerEvent &evt); diff -Nru 3depict-0.0.19-1/src/gui/mathglPane.cpp 3depict-0.0.20/src/gui/mathglPane.cpp --- 3depict-0.0.19-1/src/gui/mathglPane.cpp 2016-05-19 00:06:21.000000000 +0000 +++ 3depict-0.0.20/src/gui/mathglPane.cpp 2017-01-28 18:02:22.000000000 +0000 @@ -40,6 +40,11 @@ //Mathgl uses floating point loop computation, and can get stuck. Limit zoom precision const float MGL_ZOOM_LIMIT=10.0f*sqrt(std::numeric_limits::epsilon()); +//We overdraw on the horizontal axis, because we don't like +// the margin handling that mathgl provides. +// This is the horizontal pre-scaling factor for the mgl plot from +// the original window size +const float HORIZ_MARGIN_FACTOR = 0.25; //Mouse action types enum @@ -274,6 +279,9 @@ if(doTrap) trapfpe(false); #endif + + const unsigned int WIDTH_AXIS_MARGIN=HORIZ_MARGIN_FACTOR*w; + //If the plot has changed, been resized or is performing // a mouse action that requires updating, we need to update it //likewise if we don't have a plot, we need one. @@ -283,7 +291,7 @@ //clear the plot drawing entity if(!gr) { - gr = new mglGraph(0,w,h); + gr = new mglGraph(0,w+WIDTH_AXIS_MARGIN,h); #ifdef __APPLE__ //apparenty bug in mgl under osx - font wont load, // use random string to force fallback @@ -292,7 +300,7 @@ } else { - gr->SetSize(w,h); + gr->SetSize(w+WIDTH_AXIS_MARGIN,h); } //change the plot by panningOneD it before we draw. @@ -312,10 +320,28 @@ hasResized=false; //Copy the plot's memory buffer into a wxImage object, then draw it - char *rgbdata = (char*)malloc(w*h*3); - gr->GetRGB((char*)rgbdata,w*h*3); - - imageCacheBmp=wxBitmap(wxImage(w,h,(unsigned char*)rgbdata,true)); + char *rgbdata = (char*)malloc((w+WIDTH_AXIS_MARGIN)*h*3); + gr->GetRGB((char*)rgbdata,(w+WIDTH_AXIS_MARGIN)*h*3); + wxImage img(w,h); + + +#pragma omp parallel for + for(unsigned int uj=0;ujDrawBitmap(wxBitmap(imageCacheBmp),0,0); + dc->DrawBitmap(imageCacheBmp,0,0); //If we are engaged in a dragging operation //draw the nice little bits we need switch(mouseDragMode) @@ -627,7 +653,7 @@ thePlot->getRegion(plotId,regionId,r); //TODO: Implement a more generic region handler? - ASSERT(thePlot->plotType(plotId) == PLOT_MODE_1D); + ASSERT(thePlot->getPlotMode(plotId) == PLOT_MODE_1D); float mglStartX,mglStartY; toPlotCoords(draggingStart.x, draggingStart.y,mglStartX,mglStartY); @@ -772,6 +798,7 @@ //Bigger numbers mean faster. const float SCROLL_WHEEL_ZOOM_RATE=0.20; + //negative for a wheel forwards/up. Positive for wheel down float zoomRate=(float)event.GetWheelRotation()/(float)event.GetWheelDelta(); zoomRate=zoomRate*SCROLL_WHEEL_ZOOM_RATE; @@ -780,12 +807,12 @@ if(zoomRate > 0.0f) { zoomFactor=1.0/(1.0+zoomRate); - ASSERT(zoomFactor> 1.0f); + ASSERT(zoomFactor< 1.0f); } else { zoomFactor=(1.0-zoomRate); - ASSERT(zoomFactor < 1.0f); + ASSERT(zoomFactor > 1.0f); } @@ -965,7 +992,7 @@ endX=draggingStart.x; } - if(h-draggingEnd.y > h-draggingStart.y) + if(draggingEnd.y > draggingStart.y) { startY=draggingStart.y; endY=draggingEnd.y; @@ -1417,7 +1444,13 @@ WARN(false,"DEBUG ONLY - was outside window coord"); return false; } - + + //Account for the horizontal margin. + //Inverse transform = (Q_x-winx/2)/F + winX/2; + // Q_x : point in stretched space, F : stretch factor, winX: + winX = winX + (width*HORIZ_MARGIN_FACTOR/2.0f); + + ASSERT(gr); mglPoint pt = gr->CalcXYZ(winX,winY); @@ -1439,14 +1472,17 @@ } bool MathGLPane::toWinCoords(float plotX, float plotY, float &winX, float &winY) const { + int width, height; + GetClientSize(&width,&height); + mglPoint tmp; tmp=gr->CalcScr(mglPoint(plotX,plotY)); - winX=tmp.x; winY=tmp.y; + winX=tmp.x -width*HORIZ_MARGIN_FACTOR/2.0f; winY=tmp.y; if(plotIsLogarithmic) { //FIXME: IMPLEMENT ME - WARN(false,"NOT IMPLEMENTED FOR LOG MODE"); + WARN(false,"NOT IMPLEMENTED FOR LOG MODE (Y value)"); return true; } else @@ -1471,7 +1507,7 @@ return; - ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); + ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); //See where extending the region is allowed up to. thePlot->findRegionLimit(startMousePlot,startMouseRegion, @@ -1550,7 +1586,7 @@ { //This needs to be extended to support more //plot types. - ASSERT(thePlot->plotType(startMousePlot) == PLOT_MODE_1D); + ASSERT(thePlot->getPlotMode(startMousePlot) == PLOT_MODE_1D); //Draw "ghost" limits markers for move, //these appear as moving vertical bars to outline diff -Nru 3depict-0.0.19-1/src/Makefile.am 3depict-0.0.20/src/Makefile.am --- 3depict-0.0.19-1/src/Makefile.am 2016-05-31 01:45:39.000000000 +0000 +++ 3depict-0.0.20/src/Makefile.am 2017-01-21 13:49:41.000000000 +0000 @@ -53,16 +53,15 @@ BACKEND_SOURCE_FILES = backend/animator.cpp backend/filtertreeAnalyse.cpp backend/filtertree.cpp \ backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \ - backend/APT/vtk.cpp \ + backend/APT/vtk.cpp backend/APT/3DapReader.cpp\ backend/filters/algorithms/K3DTree.cpp backend/filters/algorithms/K3DTree-mk2.cpp\ - backend/filter.cpp backend/filters/algorithms/rdf.cpp \ + backend/filter.cpp backend/filters/algorithms/spatial.cpp \ backend/viscontrol.cpp backend/state.cpp backend/plot.cpp backend/configFile.cpp BACKEND_HEADER_FILES = backend/animator.h backend/filtertreeAnalyse.h backend/filtertree.h\ backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h backend/APT/abundanceParser.h \ - backend/APT/vtk.h backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \ - backend/filter.h backend/filters/algorithms/rdf.h \ - backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \ + backend/APT/vtk.h backend/APT/3DapReader.h backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \ + backend/filter.h backend/filters/algorithms/spatial.h backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \ backend/tree.hh #------------ diff -Nru 3depict-0.0.19-1/src/Makefile.in 3depict-0.0.20/src/Makefile.in --- 3depict-0.0.19-1/src/Makefile.in 2016-05-31 01:45:39.000000000 +0000 +++ 3depict-0.0.20/src/Makefile.in 2017-02-05 00:09:54.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# 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, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +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 \ ?) ;; \ @@ -84,15 +94,16 @@ @HAVE_WINDRES_TRUE@am__append_1 = 3Depict.rc @HAVE_WINDRES_TRUE@am__append_2 = 3Depict.rc.o subdir = src -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ + $(top_srcdir)/m4/ax_compiler_version.m4 \ + $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/wxwin.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/m4/ax_compare_version.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 = @@ -152,17 +163,18 @@ backend/filtertreeAnalyse.cpp backend/filtertree.cpp \ backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp \ backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \ - backend/APT/vtk.cpp backend/filters/algorithms/K3DTree.cpp \ + backend/APT/vtk.cpp backend/APT/3DapReader.cpp \ + backend/filters/algorithms/K3DTree.cpp \ backend/filters/algorithms/K3DTree-mk2.cpp backend/filter.cpp \ - backend/filters/algorithms/rdf.cpp backend/viscontrol.cpp \ + backend/filters/algorithms/spatial.cpp backend/viscontrol.cpp \ backend/state.cpp backend/plot.cpp backend/configFile.cpp \ backend/animator.h backend/filtertreeAnalyse.h \ backend/filtertree.h backend/APT/ionhit.h \ backend/APT/APTFileIO.h backend/APT/APTRanges.h \ backend/APT/abundanceParser.h backend/APT/vtk.h \ - backend/filters/algorithms/K3DTree.h \ + backend/APT/3DapReader.h backend/filters/algorithms/K3DTree.h \ backend/filters/algorithms/K3DTree-mk2.h backend/filter.h \ - backend/filters/algorithms/rdf.h backend/viscontrol.h \ + backend/filters/algorithms/spatial.h backend/viscontrol.h \ backend/state.h backend/plot.h backend/configFile.h \ backend/tree.hh gl/scene.cpp gl/drawables.cpp gl/effect.cpp \ gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp \ @@ -230,10 +242,11 @@ backend/APT/3Depict-APTRanges.$(OBJEXT) \ backend/APT/3Depict-abundanceParser.$(OBJEXT) \ backend/APT/3Depict-vtk.$(OBJEXT) \ + backend/APT/3Depict-3DapReader.$(OBJEXT) \ backend/filters/algorithms/3Depict-K3DTree.$(OBJEXT) \ backend/filters/algorithms/3Depict-K3DTree-mk2.$(OBJEXT) \ backend/3Depict-filter.$(OBJEXT) \ - backend/filters/algorithms/3Depict-rdf.$(OBJEXT) \ + backend/filters/algorithms/3Depict-spatial.$(OBJEXT) \ backend/3Depict-viscontrol.$(OBJEXT) \ backend/3Depict-state.$(OBJEXT) backend/3Depict-plot.$(OBJEXT) \ backend/3Depict-configFile.$(OBJEXT) @@ -341,6 +354,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -410,6 +424,7 @@ QHULL_CFLAGS = @QHULL_CFLAGS@ QHULL_LIBS = @QHULL_LIBS@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -470,6 +485,7 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -528,16 +544,15 @@ BACKEND_SOURCE_FILES = backend/animator.cpp backend/filtertreeAnalyse.cpp backend/filtertree.cpp \ backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \ - backend/APT/vtk.cpp \ + backend/APT/vtk.cpp backend/APT/3DapReader.cpp\ backend/filters/algorithms/K3DTree.cpp backend/filters/algorithms/K3DTree-mk2.cpp\ - backend/filter.cpp backend/filters/algorithms/rdf.cpp \ + backend/filter.cpp backend/filters/algorithms/spatial.cpp \ backend/viscontrol.cpp backend/state.cpp backend/plot.cpp backend/configFile.cpp BACKEND_HEADER_FILES = backend/animator.h backend/filtertreeAnalyse.h backend/filtertree.h\ backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h backend/APT/abundanceParser.h \ - backend/APT/vtk.h backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \ - backend/filter.h backend/filters/algorithms/rdf.h \ - backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \ + backend/APT/vtk.h backend/APT/3DapReader.h backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \ + backend/filter.h backend/filters/algorithms/spatial.h backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \ backend/tree.hh @@ -600,7 +615,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -841,6 +855,8 @@ backend/APT/$(DEPDIR)/$(am__dirstamp) backend/APT/3Depict-vtk.$(OBJEXT): backend/APT/$(am__dirstamp) \ backend/APT/$(DEPDIR)/$(am__dirstamp) +backend/APT/3Depict-3DapReader.$(OBJEXT): backend/APT/$(am__dirstamp) \ + backend/APT/$(DEPDIR)/$(am__dirstamp) backend/filters/algorithms/3Depict-K3DTree.$(OBJEXT): \ backend/filters/algorithms/$(am__dirstamp) \ backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp) @@ -849,7 +865,7 @@ backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp) backend/3Depict-filter.$(OBJEXT): backend/$(am__dirstamp) \ backend/$(DEPDIR)/$(am__dirstamp) -backend/filters/algorithms/3Depict-rdf.$(OBJEXT): \ +backend/filters/algorithms/3Depict-spatial.$(OBJEXT): \ backend/filters/algorithms/$(am__dirstamp) \ backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp) backend/3Depict-viscontrol.$(OBJEXT): backend/$(am__dirstamp) \ @@ -944,6 +960,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@backend/$(DEPDIR)/3Depict-plot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/$(DEPDIR)/3Depict-state.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/$(DEPDIR)/3Depict-viscontrol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@backend/APT/$(DEPDIR)/3Depict-3DapReader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/APT/$(DEPDIR)/3Depict-APTFileIO.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/APT/$(DEPDIR)/3Depict-APTRanges.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/APT/$(DEPDIR)/3Depict-abundanceParser.Po@am__quote@ @@ -971,7 +988,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@backend/filters/algorithms/$(DEPDIR)/3Depict-mass.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/3Depict-assertion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/3Depict-basics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/3Depict-colourmap.Po@am__quote@ @@ -1759,6 +1776,20 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-vtk.obj `if test -f 'backend/APT/vtk.cpp'; then $(CYGPATH_W) 'backend/APT/vtk.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/vtk.cpp'; fi` +backend/APT/3Depict-3DapReader.o: backend/APT/3DapReader.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-3DapReader.o -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-3DapReader.Tpo -c -o backend/APT/3Depict-3DapReader.o `test -f 'backend/APT/3DapReader.cpp' || echo '$(srcdir)/'`backend/APT/3DapReader.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-3DapReader.Tpo backend/APT/$(DEPDIR)/3Depict-3DapReader.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/APT/3DapReader.cpp' object='backend/APT/3Depict-3DapReader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-3DapReader.o `test -f 'backend/APT/3DapReader.cpp' || echo '$(srcdir)/'`backend/APT/3DapReader.cpp + +backend/APT/3Depict-3DapReader.obj: backend/APT/3DapReader.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-3DapReader.obj -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-3DapReader.Tpo -c -o backend/APT/3Depict-3DapReader.obj `if test -f 'backend/APT/3DapReader.cpp'; then $(CYGPATH_W) 'backend/APT/3DapReader.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/3DapReader.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-3DapReader.Tpo backend/APT/$(DEPDIR)/3Depict-3DapReader.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/APT/3DapReader.cpp' object='backend/APT/3Depict-3DapReader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-3DapReader.obj `if test -f 'backend/APT/3DapReader.cpp'; then $(CYGPATH_W) 'backend/APT/3DapReader.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/3DapReader.cpp'; fi` + backend/filters/algorithms/3Depict-K3DTree.o: backend/filters/algorithms/K3DTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-K3DTree.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo -c -o backend/filters/algorithms/3Depict-K3DTree.o `test -f 'backend/filters/algorithms/K3DTree.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/K3DTree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Po @@ -1801,19 +1832,19 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filter.obj `if test -f 'backend/filter.cpp'; then $(CYGPATH_W) 'backend/filter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filter.cpp'; fi` -backend/filters/algorithms/3Depict-rdf.o: backend/filters/algorithms/rdf.cpp -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-rdf.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo -c -o backend/filters/algorithms/3Depict-rdf.o `test -f 'backend/filters/algorithms/rdf.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/rdf.cpp -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/filters/algorithms/rdf.cpp' object='backend/filters/algorithms/3Depict-rdf.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-rdf.o `test -f 'backend/filters/algorithms/rdf.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/rdf.cpp - -backend/filters/algorithms/3Depict-rdf.obj: backend/filters/algorithms/rdf.cpp -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-rdf.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo -c -o backend/filters/algorithms/3Depict-rdf.obj `if test -f 'backend/filters/algorithms/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/rdf.cpp'; fi` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/filters/algorithms/rdf.cpp' object='backend/filters/algorithms/3Depict-rdf.obj' libtool=no @AMDEPBACKSLASH@ +backend/filters/algorithms/3Depict-spatial.o: backend/filters/algorithms/spatial.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-spatial.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Tpo -c -o backend/filters/algorithms/3Depict-spatial.o `test -f 'backend/filters/algorithms/spatial.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/spatial.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/filters/algorithms/spatial.cpp' object='backend/filters/algorithms/3Depict-spatial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-spatial.o `test -f 'backend/filters/algorithms/spatial.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/spatial.cpp + +backend/filters/algorithms/3Depict-spatial.obj: backend/filters/algorithms/spatial.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-spatial.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Tpo -c -o backend/filters/algorithms/3Depict-spatial.obj `if test -f 'backend/filters/algorithms/spatial.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/spatial.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/spatial.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-spatial.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='backend/filters/algorithms/spatial.cpp' object='backend/filters/algorithms/3Depict-spatial.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-rdf.obj `if test -f 'backend/filters/algorithms/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/rdf.cpp'; fi` +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-spatial.obj `if test -f 'backend/filters/algorithms/spatial.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/spatial.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/spatial.cpp'; fi` backend/3Depict-viscontrol.o: backend/viscontrol.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-viscontrol.o -MD -MP -MF backend/$(DEPDIR)/3Depict-viscontrol.Tpo -c -o backend/3Depict-viscontrol.o `test -f 'backend/viscontrol.cpp' || echo '$(srcdir)/'`backend/viscontrol.cpp @@ -2363,6 +2394,8 @@ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS +.PRECIOUS: Makefile + %.rc.o: $(WX_RESCOMP) $^ -o $@ 3Depict.rc diff -Nru 3depict-0.0.19-1/src/testing/mglTesting.cpp 3depict-0.0.20/src/testing/mglTesting.cpp --- 3depict-0.0.19-1/src/testing/mglTesting.cpp 2016-05-19 00:06:21.000000000 +0000 +++ 3depict-0.0.20/src/testing/mglTesting.cpp 2017-01-14 09:49:18.000000000 +0000 @@ -140,6 +140,7 @@ //TODO: write non-hack image comparison function { +/* std::string call="/usr/bin/python ../extras/image-compare-hist.py "; call+=s; call += " ../test/ref-images/plot-ref.png"; @@ -150,7 +151,11 @@ if(f) { float answer=std::numeric_limits::max(); - f >> answer; + std::string strAnswer; + strAnswer << f ; + + stream_cast(f,strAnswer); + //As an example, an "OK" image gave 177, a broken image 13000 const float THRESHOLD=2000; @@ -163,6 +168,7 @@ { WARN(false,"Unable to execute rather hacky image comparison code"); } +*/ } diff -Nru 3depict-0.0.19-1/src/testing/testing.cpp 3depict-0.0.20/src/testing/testing.cpp --- 3depict-0.0.19-1/src/testing/testing.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/testing/testing.cpp 2016-10-29 20:36:27.000000000 +0000 @@ -29,6 +29,7 @@ #include "backend/filters/allFilter.h" +#include "backend/filters/filterCommon.h" #include "backend/APT/vtk.h" #include "backend/state.h" #include "backend/configFile.h" @@ -41,8 +42,10 @@ #include "backend/APT/APTFileIO.h" #include "backend/APT/abundanceParser.h" +#include "common/mathfuncs.h" #include "common/stringFuncs.h" #include "common/xmlHelper.h" +#include "common/colourmap.h" #include "gl/isoSurface.h" @@ -121,12 +124,15 @@ LinearFeedbackShiftReg reg; TEST(reg.verifyTable(16),"Check LFSR table integrity"); + TEST(BoundCube::test(),"boundcube test"); return true; } bool runUnitTests() { + + //Set the abort pointer for the filter #ifdef HAVE_CPP_1X ATOMIC_BOOL abortFlag(false); @@ -142,6 +148,8 @@ K3DTreeMk2::setProgressPtr(&progressVar); cerr << "Running unit tests..." ; + if(!testMathfuncs()) + return false; if(!algorithmTests()) return false; @@ -151,6 +159,10 @@ if(!filterTests()) return false; + + if(!testCommon()) + return false; + if(!rangeFileLoadTests()) return false; @@ -187,6 +199,10 @@ if(!fileFormatTests()) return false; + + if(!testColourMap()) + return false; + cerr << " OK" << endl << endl; return true; diff -Nru 3depict-0.0.19-1/src/wx/wxcomponents.cpp 3depict-0.0.20/src/wx/wxcomponents.cpp --- 3depict-0.0.19-1/src/wx/wxcomponents.cpp 2016-05-15 22:33:27.000000000 +0000 +++ 3depict-0.0.20/src/wx/wxcomponents.cpp 2016-10-29 20:37:05.000000000 +0000 @@ -188,14 +188,14 @@ void CopyGrid::saveData() { - wxFileDialog *wxF = new wxFileDialog(this,TRANS("Save Data..."), wxT(""), + wxFileDialog wxF(this,TRANS("Save Data..."), wxT(""), wxT(""),TRANS("Text File (*.txt)|*.txt|All Files (*)|*"),wxFD_SAVE); - if( (wxF->ShowModal() == wxID_CANCEL)) + if( (wxF.ShowModal() == wxID_CANCEL)) return; - std::string dataFile = stlStr(wxF->GetPath()); + std::string dataFile = stlStr(wxF.GetPath()); ofstream f(dataFile.c_str()); if(!f) diff -Nru 3depict-0.0.19-1/src/wx/wxcomponents.h 3depict-0.0.20/src/wx/wxcomponents.h --- 3depict-0.0.19-1/src/wx/wxcomponents.h 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/src/wx/wxcomponents.h 2017-02-04 23:35:52.000000000 +0000 @@ -79,7 +79,7 @@ private: std::vector messageStrs; public: - TextTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS, const wxValidator& validator = wxDefaultValidator, const wxString& name = _("treeCtrl")) : wxTreeCtrl(parent,id,pos,size,style,validator,name) {}; + TextTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS, const wxValidator& validator = wxDefaultValidator, const wxString& name="treeCtrl") : wxTreeCtrl(parent,id,pos,size,style,validator,name) {}; virtual void OnTreePaint(wxPaintEvent &evt); diff -Nru 3depict-0.0.19-1/TODO 3depict-0.0.20/TODO --- 3depict-0.0.19-1/TODO 2016-05-24 09:57:26.000000000 +0000 +++ 3depict-0.0.20/TODO 2017-01-14 09:49:18.000000000 +0000 @@ -5,16 +5,20 @@ --Main app-- To Implement: == Next version == + * Fix animation under windows, seems to crash + + == Eventually == + * XML file loading is a bit iffy if paths are moved + around. A nice convenience feature would be to have an + option to scan for the files in a relative manner if + they are not found using the absolute path + * There is no way to get a mass spectrum from clusters with background. + - Import clustering w background from posgen? * Voxelisation filter should not show ions disabled in upstream range * VTK voxel data export UI - * Bounding box tick values could be improved - scientific - notation, better font size control, absol. coords, etc * Mesh generation/operation? - This is tricky. I don't have a good mesh library * Proxigram? - * Theoretical distributions are missing from the binomial algorithm - - == Eventually == * Update to qhull 2015's qhull_r (reentrant qhull). - This requires some refactoring of the doHull wrapper for convex hull computation * Voxel export dialog @@ -37,11 +41,15 @@ in trying to interpret where the user wants to drop the object * Plots cannot currently be updated on name change. Need to add "needUpdate" to setUserString * Isotope overlay in normal spectra - - Include full atomic species eg 57^Fe18^O in label + - Include full atomic species eg 57^Fe18^O in label, and charge state + * Poisson error estimation Outstanding bugs: == Next release== - * Composition profile progress bad + * There is a nasty crash bug in spatial analysis, when using local concentration mode or binomial + - Related to how ionSourceEnabled and ionTargetEnabeld are computed. These + are not the same size as the rangefile's number of ions at this time + * Under windows there is a problem with parsing the rss feed. This results in a user-visible error == Eventually== * Cluster filter wont save state correctly if parent @@ -71,7 +79,6 @@ sampling rates some percentage to be determined (load file, skip buffer). * Clustering can now be paralellised. - - consider implementing/using sphere grab algorithm, which is much faster * Examine performance characteristics of HULL_GRAB in ioninfo * Conversion of double axis-angle rotations to single axis angle rotations - any value here? - Use TRIAD/ Wahba's problem to solve. Should be a lot faster? @@ -98,6 +105,8 @@ * K3DTree currently requires public access to members of boundcube * Enums should be, where possible, moved into their relevant class' namespace * Better error code behaviour for filters. There is a lot of needless duplication + * There is a confusion of responsibility between filter.{cpp,h} and filterCommon.{cpp,h} + - what is the division here? this is unclear -- Deprecate -- * On Minor version change: diff -Nru 3depict-0.0.19-1/translations/3Depict_base.pot 3depict-0.0.20/translations/3Depict_base.pot --- 3depict-0.0.19-1/translations/3Depict_base.pot 2016-05-31 01:15:47.000000000 +0000 +++ 3depict-0.0.20/translations/3Depict_base.pot 2017-02-04 23:42:56.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-31 11:15+1000\n" +"POT-Creation-Date: 2017-02-04 23:42+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,6 +17,227 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: ../src/gl/cameras.cpp:596 +msgid "Lock" +msgstr "" + +#: ../src/gl/cameras.cpp:603 ../src/backend/filters/ionClip.cpp:529 +#: ../src/backend/filters/ionClip.cpp:551 +#: ../src/backend/filters/ionClip.cpp:573 +#: ../src/backend/filters/ionClip.cpp:610 +#: ../src/backend/filters/profile.cpp:1017 +#: ../src/backend/filters/profile.cpp:1055 +#: ../src/backend/filters/transform.cpp:1232 +#: ../src/backend/filters/transform.cpp:1259 +#: ../src/backend/filters/transform.cpp:1285 +#: ../src/backend/filters/annotation.cpp:576 +msgid "Origin" +msgstr "" + +#: ../src/gl/cameras.cpp:611 ../src/backend/filters/spatialAnalysis.cpp:872 +msgid "Target" +msgstr "" + +#: ../src/gl/cameras.cpp:617 +msgid "Up Dir." +msgstr "" + +#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 +msgid "Perspective" +msgstr "" + +#: ../src/gl/cameras.cpp:627 ../src/gl/cameras.cpp:730 +#: ../src/gui/mainFrame.cpp:5416 +msgid "Orthogonal" +msgstr "" + +#: ../src/gl/cameras.cpp:631 +msgid "Projection" +msgstr "" + +#: ../src/gl/cameras.cpp:640 +msgid "Field of View (deg)" +msgstr "" + +#: ../src/gl/cameras.cpp:646 +msgid "View size" +msgstr "" + +#: ../src/wx/wxcomponents.cpp:191 +msgid "Save Data..." +msgstr "" + +#: ../src/wx/wxcomponents.cpp:192 +msgid "Text File (*.txt)|*.txt|All Files (*)|*" +msgstr "" + +#: ../src/wx/wxcomponents.cpp:204 +msgid "Error saving file. Check output dir is writable." +msgstr "" + +#: ../src/wx/wxcomponents.cpp:204 ../src/gui/dialogs/ExportRngDialog.cpp:187 +#: ../src/gui/mainFrame.cpp:1478 ../src/gui/mainFrame.cpp:1603 +#: ../src/gui/mainFrame.cpp:1652 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2284 ../src/gui/mainFrame.cpp:2357 +#: ../src/gui/mainFrame.cpp:2460 ../src/gui/mainFrame.cpp:2573 +msgid "Save error" +msgstr "" + +#: ../src/common/basics.cpp:183 +msgid "in the future?" +msgstr "" + +#: ../src/common/basics.cpp:234 +msgid "a decade ago" +msgstr "" + +#: ../src/common/basics.cpp:235 +msgid "a year ago" +msgstr "" + +#: ../src/common/basics.cpp:236 +msgid "a month ago" +msgstr "" + +#: ../src/common/basics.cpp:237 +msgid "a week ago" +msgstr "" + +#: ../src/common/basics.cpp:238 +msgid "a day ago" +msgstr "" + +#: ../src/common/basics.cpp:239 +msgid "an hour ago" +msgstr "" + +#: ../src/common/basics.cpp:240 +msgid "45 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:241 +msgid "30 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:242 +msgid "20 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:243 +msgid "15 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:244 +msgid "10 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:245 +msgid "5 minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:246 +msgid "a minute ago" +msgstr "" + +#: ../src/common/basics.cpp:247 +msgid "30 seconds ago" +msgstr "" + +#: ../src/common/basics.cpp:248 +msgid "10 seconds ago" +msgstr "" + +#: ../src/common/basics.cpp:249 +msgid "a second ago" +msgstr "" + +#: ../src/common/basics.cpp:254 +msgid "a few decades ago" +msgstr "" + +#: ../src/common/basics.cpp:255 +msgid "a few years ago" +msgstr "" + +#: ../src/common/basics.cpp:256 +msgid "a few months ago" +msgstr "" + +#: ../src/common/basics.cpp:257 +msgid "a few weeks ago" +msgstr "" + +#: ../src/common/basics.cpp:258 +msgid "a few days ago" +msgstr "" + +#: ../src/common/basics.cpp:259 +msgid "a few hours ago" +msgstr "" + +#: ../src/common/basics.cpp:262 +msgid "tens of minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:266 +msgid "a few minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:269 +msgid "a few seconds ago" +msgstr "" + +#: ../src/common/basics.cpp:296 +msgid "moments ago" +msgstr "" + +#: ../src/common/colourmap.cpp:307 +msgid "Jet" +msgstr "" + +#: ../src/common/colourmap.cpp:308 +msgid "Hot" +msgstr "" + +#: ../src/common/colourmap.cpp:309 +msgid "Cold" +msgstr "" + +#: ../src/common/colourmap.cpp:310 +msgid "Grey" +msgstr "" + +#: ../src/common/colourmap.cpp:311 +msgid "Cyclic" +msgstr "" + +#: ../src/common/colourmap.cpp:312 +msgid "General" +msgstr "" + +#: ../src/common/colourmap.cpp:313 +msgid "Blue" +msgstr "" + +#: ../src/common/colourmap.cpp:314 +msgid "Pseudo-Random" +msgstr "" + +#: ../src/common/colourmap.cpp:315 +msgid "Inferno" +msgstr "" + +#: ../src/common/colourmap.cpp:316 +msgid "Viridis" +msgstr "" + +#: ../src/common/constants.cpp:22 +msgid "" +"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " +"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." +"rrng)|*.rrng;*.RRNG|All Files (*)|*" +msgstr "" + #: ../src/gui/glPane.cpp:642 msgid "Use shift/ctrl-space or double tap to alter reset axis" msgstr "" @@ -41,9 +262,9 @@ msgid "Saving Image " msgstr "" -#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4401 -#: ../src/gui/mainFrame.cpp:4405 ../src/gui/mainFrame.cpp:4418 -#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4504 +#: ../src/gui/mainFrame.cpp:4508 ../src/gui/mainFrame.cpp:4521 +#: ../src/backend/filters/dataLoad.cpp:339 msgid " of " msgstr "" @@ -60,14 +281,14 @@ msgstr "" #: ../src/gui/dialogs/ExportRngDialog.cpp:54 -#: ../src/backend/filters/rangeFile.cpp:656 +#: ../src/backend/filters/rangeFile.cpp:657 msgid "Ions" msgstr "" #: ../src/gui/dialogs/ExportRngDialog.cpp:55 #: ../src/gui/dialogs/rangeEditDialog.cpp:1587 -#: ../src/backend/filters/voxelise.cpp:834 -#: ../src/backend/filters/rangeFile.cpp:723 +#: ../src/backend/filters/voxelise.cpp:1049 +#: ../src/backend/filters/rangeFile.cpp:724 msgid "Ranges" msgstr "" @@ -76,10 +297,10 @@ msgstr "" #: ../src/gui/dialogs/ExportRngDialog.cpp:89 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:105 #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:352 -#: ../src/backend/filters/dataLoad.cpp:581 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 +#: ../src/backend/filters/dataLoad.cpp:610 msgid "Value" msgstr "" @@ -96,7 +317,7 @@ msgstr "" #: ../src/gui/dialogs/ExportRngDialog.cpp:116 -#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:53 +#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:52 msgid "Ion" msgstr "" @@ -108,7 +329,7 @@ msgid "Range end" msgstr "" -#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2376 +#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2395 msgid "Save pos..." msgstr "" @@ -118,21 +339,13 @@ "(*.env)|*.env|All Files (*)|*" msgstr "" -#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1463 -#: ../src/gui/mainFrame.cpp:1638 ../src/gui/mainFrame.cpp:1713 -#: ../src/gui/mainFrame.cpp:2266 ../src/gui/mainFrame.cpp:2443 -#: ../src/gui/mainFrame.cpp:2556 +#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1478 +#: ../src/gui/mainFrame.cpp:1653 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2285 ../src/gui/mainFrame.cpp:2461 +#: ../src/gui/mainFrame.cpp:2574 msgid "Unable to save. Check output destination can be written to." msgstr "" -#: ../src/gui/dialogs/ExportRngDialog.cpp:187 ../src/gui/mainFrame.cpp:1463 -#: ../src/gui/mainFrame.cpp:1588 ../src/gui/mainFrame.cpp:1637 -#: ../src/gui/mainFrame.cpp:1713 ../src/gui/mainFrame.cpp:2265 -#: ../src/gui/mainFrame.cpp:2338 ../src/gui/mainFrame.cpp:2442 -#: ../src/gui/mainFrame.cpp:2555 ../src/wx/wxcomponents.cpp:204 -msgid "Save error" -msgstr "" - #: ../src/gui/dialogs/ExportRngDialog.cpp:253 msgid "Export Range" msgstr "" @@ -145,234 +358,109 @@ msgid "Detailed view of selected range" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:92 -msgid "Cameca/Ametek RRNG" +#: ../src/gui/dialogs/rangeEditDialog.cpp:221 +msgid "Show Overlays" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:93 -msgid "Oak-Ridge RNG" +#: ../src/gui/dialogs/rangeEditDialog.cpp:246 +msgid "e.g. H2O" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:94 -msgid "Cameca/Ametek ENV" +#: ../src/gui/dialogs/rangeEditDialog.cpp:561 +#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:6071 +#: ../src/backend/filter.cpp:53 +msgid "Plot" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:156 -msgid "Key frames" +#: ../src/gui/dialogs/rangeEditDialog.cpp:562 +msgid "Short Name" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:157 -msgid "Output Data" +#: ../src/gui/dialogs/rangeEditDialog.cpp:563 +msgid "Long Name" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:158 -msgid "Filters and properties" +#: ../src/gui/dialogs/rangeEditDialog.cpp:564 +#: ../src/backend/filters/voxelise.cpp:1188 +#: ../src/backend/filters/profile.cpp:1159 +#: ../src/backend/filters/annotation.cpp:909 +#: ../src/backend/filters/spectrumPlot.cpp:679 +msgid "Colour" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:164 -msgid "Dir : " +#: ../src/gui/dialogs/rangeEditDialog.cpp:697 +#: ../src/backend/filters/annotation.cpp:613 +#: ../src/backend/filters/annotation.cpp:654 +#: ../src/backend/filters/annotation.cpp:823 +msgid "Start" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:167 -msgid "Output only when refresh required" +#: ../src/gui/dialogs/rangeEditDialog.cpp:698 +#: ../src/backend/filters/annotation.cpp:621 +#: ../src/backend/filters/annotation.cpp:663 +#: ../src/backend/filters/annotation.cpp:831 +msgid "End" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:169 -msgid "Data Types:" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 +msgid "Range or ion?" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:170 -msgid "3D Images" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 +msgid "Select type to add" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:171 -msgid "File Prefix: " +#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 +msgid "Range Editor" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:173 -msgid "Size : " +#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 +msgid "Enable or disable all overlays" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:175 -msgid "..." +#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 +msgid "Entered overlays, use delete to remove" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:176 -msgid "Point data" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:177 -#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 -msgid "Plots" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:178 -msgid "Voxel data" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:179 -msgid "Range files" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:180 -msgid "Format" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:197 -#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 -#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 -msgid "Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:702 -msgid "transition frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:702 -#: ../src/gui/mainFrame.cpp:1690 -msgid "Frame count" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:774 -msgid "Key frame : Colour" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:827 -msgid "File existed, but was unable to read or interpret file contents." -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:828 -msgid "String load failed" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:849 -msgid "Keyframe : decimal" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:858 -msgid "Keyframe : integer" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:867 -msgid "Keyframe : 3D Point" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:995 -msgid "Select or create new folder" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 -msgid "Export Animation" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 -msgid "Select filter" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1177 -msgid "Select property" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 -msgid "Filter" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 -msgid "Property" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 -#: ../src/backend/filters/annotation.cpp:545 -#: ../src/backend/filters/annotation.cpp:551 -#: ../src/backend/filters/transform.cpp:1150 -#: ../src/backend/filters/ionDownsample.cpp:465 -#: ../src/backend/filters/spatialAnalysis.cpp:1173 -msgid "Mode" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 -#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 -msgid "Start Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 -#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 -msgid "End Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 -msgid "Keyframe table" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 -msgid "Remove the selected keyframe from the table" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 -msgid "Enter where the animation frames will be exported to" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1187 -msgid "Browse to directory where the animation frames will be exported to" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 -msgid "" -"Title for files, result will be saved as #-name.png, where # is image number." -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 -msgid "Target resolution (image size)" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 -msgid "Select frame for property display" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 -msgid "Enter frame number to change frame (eg 1/20)" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 -msgid "Save point data (POS files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 +msgid "Available plots for ranging" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 -msgid "Save plots (as text files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 +msgid "Enter species to display as overlay, e.g. SiO2" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 -msgid "Save voxel data (raw files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 +msgid "Editable ranges" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1196 -msgid "Save range files in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 +msgid "Editable ions" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 -msgid "Animation parameters for current frame" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 +#: ../src/gui/dialogs/animateFilterDialog.cpp:177 +msgid "Plots" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 -msgid "Abort animation" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 +msgid "Overlay" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1203 -msgid "Run Animation" +#: ../src/gui/dialogs/autosaveDialog.cpp:39 +msgid "Remove &All" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 -msgid "Filter view" +#: ../src/gui/dialogs/autosaveDialog.cpp:123 +msgid "Restore state?" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1275 -msgid "Frame view" +#: ../src/gui/dialogs/autosaveDialog.cpp:133 +msgid "Multiple autosave states were found; would you like to restore one?" msgstr "" -#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:476 -#: ../src/backend/filter.cpp:479 +#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:481 +#: ../src/backend/filter.cpp:484 msgid "Error" msgstr "" @@ -425,35 +513,6 @@ msgid "Available stashes" msgstr "" -#: ../src/gui/dialogs/resolutionDialog.cpp:45 -msgid "Width :" -msgstr "" - -#: ../src/gui/dialogs/resolutionDialog.cpp:47 -msgid "Height :" -msgstr "" - -#: ../src/gui/dialogs/resolutionDialog.cpp:50 -#: ../src/gui/dialogs/prefDialog.cpp:85 -msgid "Reset" -msgstr "" - -#: ../src/gui/dialogs/resolutionDialog.cpp:336 -msgid "Resolution Selection" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:39 -msgid "Remove &All" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:123 -msgid "Restore state?" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:133 -msgid "Multiple autosave states were found; would you like to restore one?" -msgstr "" - #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:45 msgid "Start Frame: " msgstr "" @@ -466,6 +525,12 @@ msgid "From Table" msgstr "" +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 +#: ../src/gui/dialogs/animateFilterDialog.cpp:197 +msgid "Frame" +msgstr "" + #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:240 msgid "Select text file..." msgstr "" @@ -530,6 +595,16 @@ msgid "Ramp" msgstr "" +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 +msgid "Start Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 +msgid "End Frame" +msgstr "" + #: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:73 msgid "Initial Value" msgstr "" @@ -558,2045 +633,1753 @@ msgid "Colour at end of transition" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:73 -msgid "Panel Display" +#: ../src/gui/dialogs/animateFilterDialog.cpp:92 +msgid "Cameca/Ametek RRNG" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:75 -msgid "Online Updates" +#: ../src/gui/dialogs/animateFilterDialog.cpp:93 +msgid "Oak-Ridge RNG" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 -msgid "Startup" +#: ../src/gui/dialogs/animateFilterDialog.cpp:94 +msgid "Cameca/Ametek ENV" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:78 -msgid "Camera Speed" +#: ../src/gui/dialogs/animateFilterDialog.cpp:156 +msgid "Key frames" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:79 -msgid "Available Filters" +#: ../src/gui/dialogs/animateFilterDialog.cpp:157 +msgid "Output Data" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:84 -msgid "Reset All" +#: ../src/gui/dialogs/animateFilterDialog.cpp:158 +msgid "Filters and properties" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:87 -msgid "Show all panels" +#: ../src/gui/dialogs/animateFilterDialog.cpp:164 +msgid "Dir : " msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:88 -msgid "Remember last" +#: ../src/gui/dialogs/animateFilterDialog.cpp:167 +msgid "Output only when refresh required" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:89 -msgid "Show Selected" +#: ../src/gui/dialogs/animateFilterDialog.cpp:169 +msgid "Data Types:" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:92 -msgid "Control Pane" +#: ../src/gui/dialogs/animateFilterDialog.cpp:170 +msgid "3D Images" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:93 -msgid "Raw Data Panel" +#: ../src/gui/dialogs/animateFilterDialog.cpp:171 +msgid "File Prefix: " msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:691 -msgid "Plot List" +#: ../src/gui/dialogs/animateFilterDialog.cpp:173 +msgid "Size : " msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:96 -msgid "Periodically notify about available updates" +#: ../src/gui/dialogs/animateFilterDialog.cpp:175 +msgid "..." msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:98 -msgid "Prefer orthographic at startup" +#: ../src/gui/dialogs/animateFilterDialog.cpp:176 +msgid "Point data" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:99 -msgid "Move Rate" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:100 ../src/gui/dialogs/prefDialog.cpp:104 -msgid "(slow)" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:102 ../src/gui/dialogs/prefDialog.cpp:106 -msgid "(fast)" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:103 -msgid "Zoom Rate" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:416 -msgid "Show all panels when starting program" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:419 -msgid "Show panels visible at last shutdown when starting program" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:426 -msgid "Show selected panels when starting program" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:475 -msgid "Preferences" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:477 -msgid "Set the method of panel layout when starting the program" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:480 -msgid "" -"Lets the program check the internet to see if updates to the program version " -"are available, then notifies you about updates now and again." -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:482 -msgid "" -"By default, use an orthographic camera at startup. State files will override " -"this preference." -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:483 -msgid "Camera translation, orbit and swivel rates. " -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:484 -msgid "Camera zooming rate." -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:486 -msgid "Reset the filter initial values back to program defaults" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:487 -msgid "Reset all filter initial values back to program defaults" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:559 -msgid "Filt. Default" -msgstr "" - -#: ../src/gui/dialogs/prefDialog.cpp:561 -msgid "Camera" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:63 -msgid "Export:" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:64 -#: ../src/backend/filters/boundingBox.cpp:567 -msgid "Visible" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:65 -msgid "Selected Data" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:67 -msgid "Available Data" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:73 -msgid "Selection" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 -msgid "Index" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 -#: ../src/backend/filters/profile.cpp:604 -#: ../src/backend/filters/spatialAnalysis.cpp:2520 -#: ../src/backend/filters/spatialAnalysis.cpp:2613 -#: ../src/backend/filters/spatialAnalysis.cpp:2673 -#: ../src/backend/filters/spatialAnalysis.cpp:3628 -#: ../src/backend/filters/spatialAnalysis.cpp:3831 -#: ../src/backend/filters/spatialAnalysis.cpp:3890 -#: ../src/backend/filters/spectrumPlot.cpp:65 -msgid "Count" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:451 -msgid "Export Pos Data" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:454 -msgid "Tree of filters, select leaves to show ion data." -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:456 -msgid "Add all data from all filters" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:457 -msgid "Add all data from currently selected filter" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:458 -msgid "Add selected data from currently selected filter" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:221 -msgid "Show Overlays" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:246 -msgid "e.g. H2O" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:561 -#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:5966 -#: ../src/backend/filter.cpp:54 -msgid "Plot" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:562 -msgid "Short Name" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:563 -msgid "Long Name" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:564 -#: ../src/backend/filters/annotation.cpp:901 -#: ../src/backend/filters/voxelise.cpp:976 -#: ../src/backend/filters/profile.cpp:1155 -#: ../src/backend/filters/spectrumPlot.cpp:676 -msgid "Colour" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:697 -#: ../src/backend/filters/annotation.cpp:605 -#: ../src/backend/filters/annotation.cpp:646 -#: ../src/backend/filters/annotation.cpp:815 -msgid "Start" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:698 -#: ../src/backend/filters/annotation.cpp:613 -#: ../src/backend/filters/annotation.cpp:655 -#: ../src/backend/filters/annotation.cpp:823 -msgid "End" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 -msgid "Range or ion?" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 -msgid "Select type to add" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 -msgid "Range Editor" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 -msgid "Enable or disable all overlays" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 -msgid "Entered overlays, use delete to remove" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 -msgid "Available plots for ranging" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 -msgid "Enter species to display as overlay, e.g. SiO2" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 -msgid "Editable ranges" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 -msgid "Editable ions" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 -msgid "Overlay" -msgstr "" - -#: ../src/gui/mainFrame.cpp:119 -msgid "New camera name..." -msgstr "" - -#: ../src/gui/mainFrame.cpp:120 -msgid "New stash name..." -msgstr "" - -#: ../src/gui/mainFrame.cpp:125 -msgid "New Filter..." -msgstr "" - -#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:560 -#: ../src/backend/filters/annotation.cpp:664 -#: ../src/backend/filters/annotation.h:96 -msgid "Annotation" -msgstr "" - -#: ../src/gui/mainFrame.cpp:143 -msgid "Bounding Box" -msgstr "" - -#: ../src/gui/mainFrame.cpp:144 ../src/backend/filters/ionClip.cpp:629 -#: ../src/backend/filters/ionClip.h:66 -msgid "Clipping" -msgstr "" - -#: ../src/gui/mainFrame.cpp:145 ../src/backend/filters/clusterAnalysis.h:151 -msgid "Cluster Analysis" -msgstr "" - -#: ../src/gui/mainFrame.cpp:146 -msgid "Compos. Profiles" -msgstr "" - -#: ../src/gui/mainFrame.cpp:147 -msgid "Downsampling" -msgstr "" - -#: ../src/gui/mainFrame.cpp:148 -msgid "Extern. Prog." -msgstr "" - -#: ../src/gui/mainFrame.cpp:149 -msgid "Ion Colour" -msgstr "" - -#: ../src/gui/mainFrame.cpp:150 -msgid "Ion Info" -msgstr "" - -#: ../src/gui/mainFrame.cpp:151 -msgid "Ion Transform" +#: ../src/gui/dialogs/animateFilterDialog.cpp:178 +msgid "Voxel data" msgstr "" -#: ../src/gui/mainFrame.cpp:152 ../src/backend/filters/spectrumPlot.h:76 -msgid "Spectrum" +#: ../src/gui/dialogs/animateFilterDialog.cpp:179 +msgid "Range files" msgstr "" -#: ../src/gui/mainFrame.cpp:153 -msgid "Range File" +#: ../src/gui/dialogs/animateFilterDialog.cpp:180 +msgid "Format" msgstr "" -#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:202 -msgid "Spat. Analysis" +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 +msgid "transition frame" msgstr "" -#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:122 -msgid "Voxelisation" +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 ../src/gui/mainFrame.cpp:1705 +msgid "Frame count" msgstr "" -#: ../src/gui/mainFrame.cpp:451 -msgid "OpenGL Failed" +#: ../src/gui/dialogs/animateFilterDialog.cpp:773 +msgid "Key frame : Colour" msgstr "" -#: ../src/gui/mainFrame.cpp:452 ../src/gui/mainFrame.cpp:454 -msgid "" -"Unable to initialise the openGL (3D) panel. Program cannot start. Please " -"check your video drivers." +#: ../src/gui/dialogs/animateFilterDialog.cpp:826 +msgid "File existed, but was unable to read or interpret file contents." msgstr "" -#: ../src/gui/mainFrame.cpp:475 -msgid "&Open...\tCtrl+O" +#: ../src/gui/dialogs/animateFilterDialog.cpp:827 +msgid "String load failed" msgstr "" -#: ../src/gui/mainFrame.cpp:475 -msgid "Open state file" +#: ../src/gui/dialogs/animateFilterDialog.cpp:848 +msgid "Keyframe : decimal" msgstr "" -#: ../src/gui/mainFrame.cpp:476 -msgid "&Merge...\tCtrl+Shift+O" +#: ../src/gui/dialogs/animateFilterDialog.cpp:857 +msgid "Keyframe : integer" msgstr "" -#: ../src/gui/mainFrame.cpp:476 -msgid "Merge other file" +#: ../src/gui/dialogs/animateFilterDialog.cpp:866 +msgid "Keyframe : 3D Point" msgstr "" -#: ../src/gui/mainFrame.cpp:480 -msgid "&Recent" +#: ../src/gui/dialogs/animateFilterDialog.cpp:994 +msgid "Select or create new folder" msgstr "" -#: ../src/gui/mainFrame.cpp:481 -msgid "&Save\tCtrl+S" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1174 +msgid "Export Animation" msgstr "" -#: ../src/gui/mainFrame.cpp:481 -msgid "Save state to file" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 +msgid "Select filter" msgstr "" -#: ../src/gui/mainFrame.cpp:483 -msgid "Save &As...\tCtrl+Shift+S" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 +msgid "Select property" msgstr "" -#: ../src/gui/mainFrame.cpp:483 -msgid "Save current state to new file" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1178 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1197 +msgid "Filter" msgstr "" -#: ../src/gui/mainFrame.cpp:486 -msgid "&Plot...\tCtrl+P" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 +msgid "Property" msgstr "" -#: ../src/gui/mainFrame.cpp:486 -msgid "Export Current Plot" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 +#: ../src/backend/filters/spatialAnalysis.cpp:1062 +#: ../src/backend/filters/transform.cpp:1149 +#: ../src/backend/filters/annotation.cpp:553 +#: ../src/backend/filters/annotation.cpp:559 +#: ../src/backend/filters/ionDownsample.cpp:466 +msgid "Mode" msgstr "" -#: ../src/gui/mainFrame.cpp:487 -msgid "&Image...\tCtrl+I" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 +msgid "Keyframe table" msgstr "" -#: ../src/gui/mainFrame.cpp:487 -msgid "Export Current 3D View" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 +msgid "Remove the selected keyframe from the table" msgstr "" -#: ../src/gui/mainFrame.cpp:488 -msgid "Ion&s...\tCtrl+N" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 +msgid "Enter where the animation frames will be exported to" msgstr "" -#: ../src/gui/mainFrame.cpp:488 -msgid "Export Ion Data" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 +msgid "Browse to directory where the animation frames will be exported to" msgstr "" -#: ../src/gui/mainFrame.cpp:489 -msgid "Ran&ges...\tCtrl+G" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1188 +msgid "" +"Title for files, result will be saved as #-name.png, where # is image number." msgstr "" -#: ../src/gui/mainFrame.cpp:489 -msgid "Export Range Data" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 +msgid "Target resolution (image size)" msgstr "" -#: ../src/gui/mainFrame.cpp:490 -msgid "&Animate Filters...\tCtrl+T" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 +msgid "Select frame for property display" msgstr "" -#: ../src/gui/mainFrame.cpp:490 -msgid "Export Animated Filter" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 +msgid "Enter frame number to change frame (eg 1/20)" msgstr "" -#: ../src/gui/mainFrame.cpp:491 -msgid "Ani&mate Camera...\tCtrl+M" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 +msgid "Save point data (POS files) in output folder?" msgstr "" -#: ../src/gui/mainFrame.cpp:491 -msgid "Export Animated Camera" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 +msgid "Save plots (as text files) in output folder?" msgstr "" -#: ../src/gui/mainFrame.cpp:492 -msgid "Pac&kage...\tCtrl+K" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 +msgid "Save voxel data (raw files) in output folder?" msgstr "" -#: ../src/gui/mainFrame.cpp:492 -msgid "Export analysis package" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 +msgid "Save range files in output folder?" msgstr "" -#: ../src/gui/mainFrame.cpp:494 -msgid "&Export" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 +msgid "Animation parameters for current frame" msgstr "" -#: ../src/gui/mainFrame.cpp:497 -msgid "&Quit\tCtrl+Q" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 +msgid "Abort animation" msgstr "" -#: ../src/gui/mainFrame.cpp:497 ../src/gui/mainFrame.cpp:499 -msgid "Exit Program" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 +msgid "Run Animation" msgstr "" -#: ../src/gui/mainFrame.cpp:499 -msgid "E&xit" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1273 +msgid "Filter view" msgstr "" -#: ../src/gui/mainFrame.cpp:501 -msgid "&File" +#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 +msgid "Frame view" msgstr "" -#: ../src/gui/mainFrame.cpp:505 -msgid "&Background Colour...\tCtrl+B" +#: ../src/gui/dialogs/resolutionDialog.cpp:45 +msgid "Width :" msgstr "" -#: ../src/gui/mainFrame.cpp:505 -msgid "Change background colour" +#: ../src/gui/dialogs/resolutionDialog.cpp:47 +msgid "Height :" msgstr "" -#: ../src/gui/mainFrame.cpp:509 -msgid "&Control Pane\tF2" +#: ../src/gui/dialogs/resolutionDialog.cpp:50 +#: ../src/gui/dialogs/prefDialog.cpp:85 +msgid "Reset" msgstr "" -#: ../src/gui/mainFrame.cpp:509 ../src/gui/mainFrame.cpp:512 -msgid "Toggle left control pane" +#: ../src/gui/dialogs/resolutionDialog.cpp:336 +msgid "Resolution Selection" msgstr "" -#: ../src/gui/mainFrame.cpp:512 -msgid "&Control Pane\tAlt+C" +#: ../src/gui/dialogs/ExportPos.cpp:63 +msgid "Export:" msgstr "" -#: ../src/gui/mainFrame.cpp:518 -msgid "&Raw Data Pane\tF3" +#: ../src/gui/dialogs/ExportPos.cpp:64 +#: ../src/backend/filters/boundingBox.cpp:568 +msgid "Visible" msgstr "" -#: ../src/gui/mainFrame.cpp:518 ../src/gui/mainFrame.cpp:521 -msgid "Toggle raw data pane (bottom)" +#: ../src/gui/dialogs/ExportPos.cpp:65 +msgid "Selected Data" msgstr "" -#: ../src/gui/mainFrame.cpp:521 -msgid "&Raw Data Pane\tAlt+R" +#: ../src/gui/dialogs/ExportPos.cpp:67 +msgid "Available Data" msgstr "" -#: ../src/gui/mainFrame.cpp:525 -msgid "&Plot List\tF4" +#: ../src/gui/dialogs/ExportPos.cpp:73 +msgid "Selection" msgstr "" -#: ../src/gui/mainFrame.cpp:525 ../src/gui/mainFrame.cpp:527 -msgid "Toggle plot list" +#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 +msgid "Index" msgstr "" -#: ../src/gui/mainFrame.cpp:527 -msgid "&Plot List\tAlt+P" +#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 +#: ../src/backend/filters/spatialAnalysis.cpp:2388 +#: ../src/backend/filters/spatialAnalysis.cpp:2481 +#: ../src/backend/filters/spatialAnalysis.cpp:2541 +#: ../src/backend/filters/spatialAnalysis.cpp:3292 +#: ../src/backend/filters/spatialAnalysis.cpp:3481 +#: ../src/backend/filters/profile.cpp:608 +#: ../src/backend/filters/spectrumPlot.cpp:65 +msgid "Count" msgstr "" -#: ../src/gui/mainFrame.cpp:533 -msgid "&Legend\tCtrl+L" +#: ../src/gui/dialogs/ExportPos.cpp:451 +msgid "Export Pos Data" msgstr "" -#: ../src/gui/mainFrame.cpp:533 -msgid "Toggle Legend display" +#: ../src/gui/dialogs/ExportPos.cpp:454 +msgid "Tree of filters, select leaves to show ion data." msgstr "" -#: ../src/gui/mainFrame.cpp:535 -msgid "P&lot..." +#: ../src/gui/dialogs/ExportPos.cpp:456 +msgid "Add all data from all filters" msgstr "" -#: ../src/gui/mainFrame.cpp:536 -msgid "&Axis\tCtrl+Shift+I" +#: ../src/gui/dialogs/ExportPos.cpp:457 +msgid "Add all data from currently selected filter" msgstr "" -#: ../src/gui/mainFrame.cpp:536 -msgid "Toggle World Axis display" +#: ../src/gui/dialogs/ExportPos.cpp:458 +msgid "Add selected data from currently selected filter" msgstr "" -#: ../src/gui/mainFrame.cpp:541 -msgid "&Fullscreen mode\tF11" +#: ../src/gui/dialogs/prefDialog.cpp:73 +msgid "Panel Display" msgstr "" -#: ../src/gui/mainFrame.cpp:541 ../src/gui/mainFrame.cpp:543 -msgid "Next fullscreen mode: with toolbars" +#: ../src/gui/dialogs/prefDialog.cpp:75 +msgid "Online Updates" msgstr "" -#: ../src/gui/mainFrame.cpp:543 -msgid "&Fullscreen mode\tCtrl+Shift+F" +#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 +msgid "Startup" msgstr "" -#: ../src/gui/mainFrame.cpp:548 -msgid "&Undo\tCtrl+Z" +#: ../src/gui/dialogs/prefDialog.cpp:78 +msgid "Camera Speed" msgstr "" -#: ../src/gui/mainFrame.cpp:550 -msgid "&Redo\tCtrl+Y" +#: ../src/gui/dialogs/prefDialog.cpp:79 +msgid "Available Filters" msgstr "" -#: ../src/gui/mainFrame.cpp:553 -msgid "&Range" +#: ../src/gui/dialogs/prefDialog.cpp:84 +msgid "Reset All" msgstr "" -#: ../src/gui/mainFrame.cpp:556 -msgid "&Preferences" +#: ../src/gui/dialogs/prefDialog.cpp:87 +msgid "Show all panels" msgstr "" -#: ../src/gui/mainFrame.cpp:558 -msgid "&Edit" +#: ../src/gui/dialogs/prefDialog.cpp:88 +msgid "Remember last" msgstr "" -#: ../src/gui/mainFrame.cpp:561 -msgid "&View" +#: ../src/gui/dialogs/prefDialog.cpp:89 +msgid "Show Selected" msgstr "" -#: ../src/gui/mainFrame.cpp:563 -msgid "&Help...\tCtrl+H" +#: ../src/gui/dialogs/prefDialog.cpp:92 +msgid "Control Pane" msgstr "" -#: ../src/gui/mainFrame.cpp:563 -msgid "Show help files and documentation" +#: ../src/gui/dialogs/prefDialog.cpp:93 +msgid "Raw Data Panel" msgstr "" -#: ../src/gui/mainFrame.cpp:564 -msgid "&Contact..." +#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:693 +msgid "Plot List" msgstr "" -#: ../src/gui/mainFrame.cpp:564 -msgid "Open contact page" +#: ../src/gui/dialogs/prefDialog.cpp:96 +msgid "Periodically notify about available updates" msgstr "" -#: ../src/gui/mainFrame.cpp:566 -msgid "&About..." +#: ../src/gui/dialogs/prefDialog.cpp:98 +msgid "Prefer orthographic at startup" msgstr "" -#: ../src/gui/mainFrame.cpp:566 -msgid "Information about this program" +#: ../src/gui/dialogs/prefDialog.cpp:99 +msgid "Move Rate" msgstr "" -#: ../src/gui/mainFrame.cpp:567 -msgid "&Help" +#: ../src/gui/dialogs/prefDialog.cpp:100 ../src/gui/dialogs/prefDialog.cpp:104 +msgid "(slow)" msgstr "" -#: ../src/gui/mainFrame.cpp:569 -msgid "Stashed Filters" +#: ../src/gui/dialogs/prefDialog.cpp:102 ../src/gui/dialogs/prefDialog.cpp:106 +msgid "(fast)" msgstr "" -#: ../src/gui/mainFrame.cpp:574 -msgid "New Filters" +#: ../src/gui/dialogs/prefDialog.cpp:103 +msgid "Zoom Rate" msgstr "" -#: ../src/gui/mainFrame.cpp:604 -msgid "Auto Refresh" +#: ../src/gui/dialogs/prefDialog.cpp:416 +msgid "Show all panels when starting program" msgstr "" -#: ../src/gui/mainFrame.cpp:610 -msgid "Filter settings" +#: ../src/gui/dialogs/prefDialog.cpp:419 +msgid "Show panels visible at last shutdown when starting program" msgstr "" -#: ../src/gui/mainFrame.cpp:613 -msgid "Camera Name" +#: ../src/gui/dialogs/prefDialog.cpp:426 +msgid "Show selected panels when starting program" msgstr "" -#: ../src/gui/mainFrame.cpp:625 -msgid "Resize to Fit" +#: ../src/gui/dialogs/prefDialog.cpp:475 +msgid "Preferences" msgstr "" -#: ../src/gui/mainFrame.cpp:627 -msgid "3D Post-processing" +#: ../src/gui/dialogs/prefDialog.cpp:477 +msgid "Set the method of panel layout when starting the program" msgstr "" -#: ../src/gui/mainFrame.cpp:629 -msgid "Enable Cropping" +#: ../src/gui/dialogs/prefDialog.cpp:480 +msgid "" +"Lets the program check the internet to see if updates to the program version " +"are available, then notifies you about updates now and again." msgstr "" -#: ../src/gui/mainFrame.cpp:631 ../src/gui/mainFrame.cpp:642 -msgid "x-y" +#: ../src/gui/dialogs/prefDialog.cpp:482 +msgid "" +"By default, use an orthographic camera at startup. State files will override " +"this preference." msgstr "" -#: ../src/gui/mainFrame.cpp:632 ../src/gui/mainFrame.cpp:643 -msgid "x-z" +#: ../src/gui/dialogs/prefDialog.cpp:483 +msgid "Camera translation, orbit and swivel rates. " msgstr "" -#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 -msgid "y-x" +#: ../src/gui/dialogs/prefDialog.cpp:484 +msgid "Camera zooming rate." msgstr "" -#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 -msgid "y-z" +#: ../src/gui/dialogs/prefDialog.cpp:486 +msgid "Reset the filter initial values back to program defaults" msgstr "" -#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 -msgid "z-x" +#: ../src/gui/dialogs/prefDialog.cpp:487 +msgid "Reset all filter initial values back to program defaults" msgstr "" -#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 -msgid "z-y" +#: ../src/gui/dialogs/prefDialog.cpp:559 +msgid "Filt. Default" msgstr "" -#: ../src/gui/mainFrame.cpp:651 -msgid "Use camera coordinates" +#: ../src/gui/dialogs/prefDialog.cpp:561 +msgid "Camera" msgstr "" -#: ../src/gui/mainFrame.cpp:652 -msgid "dX" +#: ../src/gui/mainFrame.cpp:119 +msgid "New camera name..." msgstr "" -#: ../src/gui/mainFrame.cpp:654 -msgid "dY" +#: ../src/gui/mainFrame.cpp:120 +msgid "New stash name..." msgstr "" -#: ../src/gui/mainFrame.cpp:656 -msgid "dZ" +#: ../src/gui/mainFrame.cpp:125 +msgid "New Filter..." msgstr "" -#: ../src/gui/mainFrame.cpp:658 -msgid "Enable Anaglyphic Stereo" +#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:568 +#: ../src/backend/filters/annotation.cpp:672 +#: ../src/backend/filters/annotation.h:96 +msgid "Annotation" msgstr "" -#: ../src/gui/mainFrame.cpp:659 -msgid "Flip Channels" +#: ../src/gui/mainFrame.cpp:143 +msgid "Bounding Box" msgstr "" -#: ../src/gui/mainFrame.cpp:660 -msgid "Anaglyph Mode" +#: ../src/gui/mainFrame.cpp:144 ../src/backend/filters/ionClip.cpp:629 +#: ../src/backend/filters/ionClip.h:66 +msgid "Clipping" msgstr "" -#: ../src/gui/mainFrame.cpp:662 -msgid "Red-Blue" +#: ../src/gui/mainFrame.cpp:145 ../src/backend/filters/clusterAnalysis.h:151 +msgid "Cluster Analysis" msgstr "" -#: ../src/gui/mainFrame.cpp:663 -msgid "Red-Green" +#: ../src/gui/mainFrame.cpp:146 +msgid "Compos. Profiles" msgstr "" -#: ../src/gui/mainFrame.cpp:664 -msgid "Red-Cyan" +#: ../src/gui/mainFrame.cpp:147 +msgid "Downsampling" msgstr "" -#: ../src/gui/mainFrame.cpp:665 -msgid "Green-Magenta" +#: ../src/gui/mainFrame.cpp:148 +msgid "Extern. Prog." msgstr "" -#: ../src/gui/mainFrame.cpp:669 -msgid "Baseline Separation" +#: ../src/gui/mainFrame.cpp:149 +msgid "Ion Colour" msgstr "" -#: ../src/gui/mainFrame.cpp:671 ../src/backend/filters/annotation.cpp:906 -#: ../src/backend/filters/voxelise.cpp:938 -#: ../src/backend/filters/voxelise.cpp:1106 -#: ../src/backend/filters/profile.cpp:1164 -#: ../src/backend/filters/boundingBox.cpp:731 -#: ../src/backend/filters/dataLoad.cpp:666 -#: ../src/backend/filters/spectrumPlot.cpp:683 -msgid "Appearance" +#: ../src/gui/mainFrame.cpp:150 +msgid "Ion Info" msgstr "" -#: ../src/gui/mainFrame.cpp:672 -msgid "Smooth && translucent objects" +#: ../src/gui/mainFrame.cpp:151 +msgid "Ion Transform" msgstr "" -#: ../src/gui/mainFrame.cpp:674 -msgid "3D lighting" +#: ../src/gui/mainFrame.cpp:152 ../src/backend/filters/spectrumPlot.h:76 +msgid "Spectrum" msgstr "" -#: ../src/gui/mainFrame.cpp:677 -msgid "Performance" +#: ../src/gui/mainFrame.cpp:153 +msgid "Range File" msgstr "" -#: ../src/gui/mainFrame.cpp:678 -msgid "Fast and weak randomisation." +#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:192 +msgid "Spat. Analysis" msgstr "" -#: ../src/gui/mainFrame.cpp:680 -msgid "Limit Output Pts" +#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:126 +msgid "Voxelisation" msgstr "" -#: ../src/gui/mainFrame.cpp:685 -msgid "Filter caching" +#: ../src/gui/mainFrame.cpp:453 +msgid "OpenGL Failed" msgstr "" -#: ../src/gui/mainFrame.cpp:687 -msgid "Max. Ram usage (%)" +#: ../src/gui/mainFrame.cpp:454 ../src/gui/mainFrame.cpp:456 +msgid "" +"Unable to initialise the openGL (3D) panel. Program cannot start. Please " +"check your video drivers." msgstr "" -#: ../src/gui/mainFrame.cpp:759 -msgid "Warning: Your configuration file appears to be invalid:\n" +#: ../src/gui/mainFrame.cpp:477 +msgid "&Open...\tCtrl+O" msgstr "" -#: ../src/gui/mainFrame.cpp:760 -msgid "\tConfig Load: " +#: ../src/gui/mainFrame.cpp:477 +msgid "Open state file" msgstr "" -#: ../src/gui/mainFrame.cpp:1054 -msgid "Current state has not been saved, would you like to save it now?" +#: ../src/gui/mainFrame.cpp:478 +msgid "&Merge...\tCtrl+Shift+O" msgstr "" -#: ../src/gui/mainFrame.cpp:1055 -msgid "State changed" +#: ../src/gui/mainFrame.cpp:478 +msgid "Merge other file" msgstr "" -#: ../src/gui/mainFrame.cpp:1073 -msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)" +#: ../src/gui/mainFrame.cpp:482 +msgid "&Recent" msgstr "" -#: ../src/gui/mainFrame.cpp:1075 -msgid "XML State File (*.xml)" +#: ../src/gui/mainFrame.cpp:483 +msgid "&Save\tCtrl+S" msgstr "" -#: ../src/gui/mainFrame.cpp:1076 -msgid "POS File (*.pos)" +#: ../src/gui/mainFrame.cpp:483 +msgid "Save state to file" msgstr "" -#: ../src/gui/mainFrame.cpp:1077 -msgid "LAWATAP ATO File (*.ato)" +#: ../src/gui/mainFrame.cpp:485 +msgid "Save &As...\tCtrl+Shift+S" msgstr "" -#: ../src/gui/mainFrame.cpp:1078 -msgid "Text File (*.txt, *.csv)" +#: ../src/gui/mainFrame.cpp:485 +msgid "Save current state to new file" msgstr "" -#: ../src/gui/mainFrame.cpp:1079 -msgid "All Files (*)" +#: ../src/gui/mainFrame.cpp:488 +msgid "&Plot...\tCtrl+P" msgstr "" -#: ../src/gui/mainFrame.cpp:1092 ../src/gui/mainFrame.cpp:1141 -msgid "Select Data or State File..." +#: ../src/gui/mainFrame.cpp:488 +msgid "Export Current Plot" msgstr "" -#: ../src/gui/mainFrame.cpp:1142 -msgid "" -"3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|" -"XML State File (*.xml)|*.xml|All Files (*)|*" +#: ../src/gui/mainFrame.cpp:489 +msgid "&Image...\tCtrl+I" msgstr "" -#: ../src/gui/mainFrame.cpp:1153 -msgid "Merged file." +#: ../src/gui/mainFrame.cpp:489 +msgid "Export Current 3D View" msgstr "" -#: ../src/gui/mainFrame.cpp:1256 -msgid "Tip: You can use ⌘ (command) to merge" +#: ../src/gui/mainFrame.cpp:490 +msgid "Ion&s...\tCtrl+N" msgstr "" -#: ../src/gui/mainFrame.cpp:1258 -msgid "Tip: You can use ctrl to merge" +#: ../src/gui/mainFrame.cpp:490 +msgid "Export Ion Data" msgstr "" -#: ../src/gui/mainFrame.cpp:1292 -msgid "Load error" +#: ../src/gui/mainFrame.cpp:491 +msgid "Ran&ges...\tCtrl+G" msgstr "" -#: ../src/gui/mainFrame.cpp:1293 -msgid "" -"Error loading state file.\n" -"See console for more info." +#: ../src/gui/mainFrame.cpp:491 +msgid "Export Range Data" msgstr "" -#: ../src/gui/mainFrame.cpp:1301 -msgid "" -"This state file contains filters that can be unsafe to run\n" -"Do you wish to remove these before continuing?." +#: ../src/gui/mainFrame.cpp:492 +msgid "&Animate Filters...\tCtrl+T" msgstr "" -#: ../src/gui/mainFrame.cpp:1302 -msgid "Security warning" +#: ../src/gui/mainFrame.cpp:492 +msgid "Export Animated Filter" msgstr "" -#: ../src/gui/mainFrame.cpp:1484 ../src/gui/mainFrame.cpp:1580 -#: ../src/gui/mainFrame.cpp:2010 -msgid "Unable to save" +#: ../src/gui/mainFrame.cpp:493 +msgid "Ani&mate Camera...\tCtrl+M" msgstr "" -#: ../src/gui/mainFrame.cpp:1485 -msgid "No plot available. Please create a plot before exporting." +#: ../src/gui/mainFrame.cpp:493 +msgid "Export Animated Camera" msgstr "" -#: ../src/gui/mainFrame.cpp:1489 -msgid "Save plot..." +#: ../src/gui/mainFrame.cpp:494 +msgid "Pac&kage...\tCtrl+K" msgstr "" -#: ../src/gui/mainFrame.cpp:1490 -msgid "" -"By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*." -"svg|PNG File (*.png)|*.png|All Files (*)|*" +#: ../src/gui/mainFrame.cpp:494 +msgid "Export analysis package" msgstr "" -#: ../src/gui/mainFrame.cpp:1544 -msgid "Select type for save" +#: ../src/gui/mainFrame.cpp:496 +msgid "&Export" msgstr "" -#: ../src/gui/mainFrame.cpp:1545 -msgid "Choose file type" +#: ../src/gui/mainFrame.cpp:499 +msgid "&Quit\tCtrl+Q" msgstr "" -#: ../src/gui/mainFrame.cpp:1565 ../src/gui/mainFrame.cpp:1622 -#: ../src/gui/mainFrame.cpp:1658 -msgid "Choose resolution" +#: ../src/gui/mainFrame.cpp:499 ../src/gui/mainFrame.cpp:501 +msgid "Exit Program" msgstr "" -#: ../src/gui/mainFrame.cpp:1581 -msgid "Unknown file extension. Please use \"svg\" or \"png\"" +#: ../src/gui/mainFrame.cpp:501 +msgid "E&xit" msgstr "" -#: ../src/gui/mainFrame.cpp:1592 -msgid "Saved plot: " +#: ../src/gui/mainFrame.cpp:503 +msgid "&File" msgstr "" -#: ../src/gui/mainFrame.cpp:1599 ../src/gui/mainFrame.cpp:1651 -msgid "Save Image..." +#: ../src/gui/mainFrame.cpp:507 +msgid "&Background Colour...\tCtrl+B" msgstr "" -#: ../src/gui/mainFrame.cpp:1600 ../src/gui/mainFrame.cpp:1652 -msgid "PNG File (*.png)|*.png|All Files (*)|*" +#: ../src/gui/mainFrame.cpp:507 +msgid "Change background colour" msgstr "" -#: ../src/gui/mainFrame.cpp:1614 -msgid "File already exists. Overwrite?" +#: ../src/gui/mainFrame.cpp:511 +msgid "&Control Pane\tF2" msgstr "" -#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:2407 -#: ../src/gui/mainFrame.cpp:2513 ../src/gui/mainFrame.cpp:2536 -msgid "Overwrite?" +#: ../src/gui/mainFrame.cpp:511 ../src/gui/mainFrame.cpp:514 +msgid "Toggle left control pane" msgstr "" -#: ../src/gui/mainFrame.cpp:1642 ../src/gui/mainFrame.cpp:1718 -msgid "Saved 3D View :" +#: ../src/gui/mainFrame.cpp:514 +msgid "&Control Pane\tAlt+C" msgstr "" -#: ../src/gui/mainFrame.cpp:1672 -msgid "Program limitation" +#: ../src/gui/mainFrame.cpp:520 +msgid "&Raw Data Pane\tF3" msgstr "" -#: ../src/gui/mainFrame.cpp:1673 -msgid "" -"Limitation on the screenshot dimension; please ensure that both width and " -"height exceed the initial values,\n" -" or that they are smaller than the initial values.\n" -" If this bothers, please submit a bug." +#: ../src/gui/mainFrame.cpp:520 ../src/gui/mainFrame.cpp:523 +msgid "Toggle raw data pane (bottom)" msgstr "" -#: ../src/gui/mainFrame.cpp:1690 -msgid "Number of frames" +#: ../src/gui/mainFrame.cpp:523 +msgid "&Raw Data Pane\tAlt+R" msgstr "" -#: ../src/gui/mainFrame.cpp:1744 -msgid "Abo&rt" +#: ../src/gui/mainFrame.cpp:527 +msgid "&Plot List\tF4" msgstr "" -#: ../src/gui/mainFrame.cpp:1746 -msgid "&Refresh" +#: ../src/gui/mainFrame.cpp:527 ../src/gui/mainFrame.cpp:529 +msgid "Toggle plot list" msgstr "" -#: ../src/gui/mainFrame.cpp:1855 -msgid "Cannot animate with no filters." +#: ../src/gui/mainFrame.cpp:529 +msgid "&Plot List\tAlt+P" msgstr "" -#: ../src/gui/mainFrame.cpp:1933 -msgid "Animating" +#: ../src/gui/mainFrame.cpp:535 +msgid "&Legend\tCtrl+L" msgstr "" -#: ../src/gui/mainFrame.cpp:1934 -msgid "Performing refresh" +#: ../src/gui/mainFrame.cpp:535 +msgid "Toggle Legend display" msgstr "" -#: ../src/gui/mainFrame.cpp:1960 -msgid "Filter property change failed" +#: ../src/gui/mainFrame.cpp:537 +msgid "P&lot..." msgstr "" -#: ../src/gui/mainFrame.cpp:1982 -msgid "Refresh failed on frame :" +#: ../src/gui/mainFrame.cpp:538 +msgid "&Axis\tCtrl+Shift+I" msgstr "" -#: ../src/gui/mainFrame.cpp:2011 -msgid "Image save failed for frame " +#: ../src/gui/mainFrame.cpp:538 +msgid "Toggle World Axis display" msgstr "" -#: ../src/gui/mainFrame.cpp:2036 -msgid "Ion save failed" +#: ../src/gui/mainFrame.cpp:543 +msgid "&Fullscreen mode\tF11" msgstr "" -#: ../src/gui/mainFrame.cpp:2037 -msgid "Unable to save ions for frame " +#: ../src/gui/mainFrame.cpp:543 ../src/gui/mainFrame.cpp:545 +msgid "Next fullscreen mode: with toolbars" msgstr "" -#: ../src/gui/mainFrame.cpp:2068 -msgid "Plot save failed" +#: ../src/gui/mainFrame.cpp:545 +msgid "&Fullscreen mode\tCtrl+Shift+F" msgstr "" -#: ../src/gui/mainFrame.cpp:2069 -msgid "Unable to save plot or frame " +#: ../src/gui/mainFrame.cpp:550 +msgid "&Undo\tCtrl+Z" msgstr "" -#: ../src/gui/mainFrame.cpp:2110 -msgid "Range save failed" +#: ../src/gui/mainFrame.cpp:552 +msgid "&Redo\tCtrl+Y" msgstr "" -#: ../src/gui/mainFrame.cpp:2111 -msgid "Unable to save range for frame " +#: ../src/gui/mainFrame.cpp:555 +msgid "&Range" msgstr "" -#: ../src/gui/mainFrame.cpp:2140 -msgid "Voxel save failed" +#: ../src/gui/mainFrame.cpp:558 +msgid "&Preferences" msgstr "" -#: ../src/gui/mainFrame.cpp:2141 -msgid "Unable to save voxels for frame " +#: ../src/gui/mainFrame.cpp:560 +msgid "&Edit" msgstr "" -#: ../src/gui/mainFrame.cpp:2170 -msgid "Animate failed" +#: ../src/gui/mainFrame.cpp:563 +msgid "&View" msgstr "" -#: ../src/gui/mainFrame.cpp:2194 ../src/gui/mainFrame.cpp:2360 -#: ../src/gui/mainFrame.cpp:2468 -msgid "No filters means no data to export" +#: ../src/gui/mainFrame.cpp:565 +msgid "&Help...\tCtrl+H" msgstr "" -#: ../src/gui/mainFrame.cpp:2208 -msgid "Package name" +#: ../src/gui/mainFrame.cpp:565 +msgid "Show help files and documentation" msgstr "" -#: ../src/gui/mainFrame.cpp:2209 -msgid "Package directory name" +#: ../src/gui/mainFrame.cpp:566 +msgid "&Contact..." msgstr "" -#: ../src/gui/mainFrame.cpp:2211 -msgid "AnalysisPackage" +#: ../src/gui/mainFrame.cpp:566 +msgid "Open contact page" msgstr "" -#: ../src/gui/mainFrame.cpp:2224 -msgid "Package folder already exists, won't overwrite." +#: ../src/gui/mainFrame.cpp:568 +msgid "&About..." msgstr "" -#: ../src/gui/mainFrame.cpp:2225 -msgid "Not available" +#: ../src/gui/mainFrame.cpp:568 +msgid "Information about this program" msgstr "" -#: ../src/gui/mainFrame.cpp:2250 -msgid "" -"Package folder creation failed\n" -"check writing to this location is possible." +#: ../src/gui/mainFrame.cpp:569 +msgid "&Help" msgstr "" -#: ../src/gui/mainFrame.cpp:2251 -msgid "Folder creation failed" +#: ../src/gui/mainFrame.cpp:571 +msgid "Stashed Filters" msgstr "" -#: ../src/gui/mainFrame.cpp:2271 -msgid "Copying" +#: ../src/gui/mainFrame.cpp:576 +msgid "New Filters" msgstr "" -#: ../src/gui/mainFrame.cpp:2272 -msgid "Copying referenced files" +#: ../src/gui/mainFrame.cpp:606 +msgid "Auto Refresh" msgstr "" -#: ../src/gui/mainFrame.cpp:2338 -msgid "Error copying file" +#: ../src/gui/mainFrame.cpp:612 +msgid "Filter settings" msgstr "" -#: ../src/gui/mainFrame.cpp:2347 -msgid "Saved package: " +#: ../src/gui/mainFrame.cpp:615 +msgid "Camera Name" msgstr "" -#: ../src/gui/mainFrame.cpp:2371 -msgid "Export" +#: ../src/gui/mainFrame.cpp:627 +msgid "Resize to Fit" msgstr "" -#: ../src/gui/mainFrame.cpp:2377 -msgid "" -"POS Data (*.pos)|*.pos|Text File (*.txt)|*.txt|VTK Legacy (*.vtk)|*.vtk|All " -"Files (*)|*" +#: ../src/gui/mainFrame.cpp:629 +msgid "3D Post-processing" msgstr "" -#: ../src/gui/mainFrame.cpp:2406 ../src/gui/mainFrame.cpp:2512 -msgid "File already exists, overwrite?" +#: ../src/gui/mainFrame.cpp:631 +msgid "Enable Cropping" msgstr "" -#: ../src/gui/mainFrame.cpp:2447 -msgid "Saved ions: " +#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 +msgid "x-y" msgstr "" -#: ../src/gui/mainFrame.cpp:2472 -msgid "Export Ranges" +#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 +msgid "x-z" msgstr "" -#: ../src/gui/mainFrame.cpp:2494 -msgid "Save state..." +#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 +msgid "y-x" msgstr "" -#: ../src/gui/mainFrame.cpp:2495 -msgid "XML state file (*.xml)|*.xml|All Files (*)|*" +#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 +msgid "y-z" msgstr "" -#: ../src/gui/mainFrame.cpp:2535 -msgid "Files have been referred to using relative paths. Keep relative paths?" +#: ../src/gui/mainFrame.cpp:637 ../src/gui/mainFrame.cpp:648 +msgid "z-x" msgstr "" -#: ../src/gui/mainFrame.cpp:2568 -msgid "Saved state: " +#: ../src/gui/mainFrame.cpp:638 ../src/gui/mainFrame.cpp:649 +msgid "z-y" msgstr "" -#: ../src/gui/mainFrame.cpp:2644 -msgid "Range editor" +#: ../src/gui/mainFrame.cpp:653 +msgid "Use camera coordinates" msgstr "" -#: ../src/gui/mainFrame.cpp:2901 -msgid "Manual not found locally. Launching web browser" +#: ../src/gui/mainFrame.cpp:654 +msgid "dX" msgstr "" -#: ../src/gui/mainFrame.cpp:2910 -msgid "Opening contact page in external web browser" +#: ../src/gui/mainFrame.cpp:656 +msgid "dY" msgstr "" -#: ../src/gui/mainFrame.cpp:2918 -msgid "No filter stashes to edit." +#: ../src/gui/mainFrame.cpp:658 +msgid "dZ" msgstr "" -#: ../src/gui/mainFrame.cpp:2922 -msgid "Filter Stashes" +#: ../src/gui/mainFrame.cpp:660 +msgid "Enable Anaglyphic Stereo" msgstr "" -#: ../src/gui/mainFrame.cpp:2939 -msgid "Quick and dirty analysis for point data." +#: ../src/gui/mainFrame.cpp:661 +msgid "Flip Channels" msgstr "" -#: ../src/gui/mainFrame.cpp:2949 -msgid "Compiled with wx Version: " +#: ../src/gui/mainFrame.cpp:662 +msgid "Anaglyph Mode" msgstr "" -#: ../src/gui/mainFrame.cpp:2970 -msgid "Press enter to store new stash" +#: ../src/gui/mainFrame.cpp:664 +msgid "Red-Blue" msgstr "" -#: ../src/gui/mainFrame.cpp:2976 -msgid "Press enter to restore stash" +#: ../src/gui/mainFrame.cpp:665 +msgid "Red-Green" msgstr "" -#: ../src/gui/mainFrame.cpp:3009 -msgid "Unable to create stash, selection invalid" +#: ../src/gui/mainFrame.cpp:666 +msgid "Red-Cyan" msgstr "" -#: ../src/gui/mainFrame.cpp:3016 -msgid "Created new filter tree stash" +#: ../src/gui/mainFrame.cpp:667 +msgid "Green-Magenta" msgstr "" -#: ../src/gui/mainFrame.cpp:3123 -msgid "Filter type not a data source - can't be at tree base" +#: ../src/gui/mainFrame.cpp:671 +msgid "Baseline Separation" msgstr "" -#: ../src/gui/mainFrame.cpp:3263 -msgid "Moving - Hold ⌘ (command) to copy" +#: ../src/gui/mainFrame.cpp:673 ../src/backend/filters/voxelise.cpp:1150 +#: ../src/backend/filters/voxelise.cpp:1409 +#: ../src/backend/filters/profile.cpp:1168 +#: ../src/backend/filters/boundingBox.cpp:732 +#: ../src/backend/filters/annotation.cpp:914 +#: ../src/backend/filters/dataLoad.cpp:755 +#: ../src/backend/filters/spectrumPlot.cpp:686 +msgid "Appearance" msgstr "" -#: ../src/gui/mainFrame.cpp:3265 -msgid "Moving - Hold control to copy" +#: ../src/gui/mainFrame.cpp:674 +msgid "Smooth && translucent objects" msgstr "" -#: ../src/gui/mainFrame.cpp:3604 -msgid "Press enter to store new camera" +#: ../src/gui/mainFrame.cpp:676 +msgid "3D lighting" msgstr "" -#: ../src/gui/mainFrame.cpp:3606 -msgid "Press enter to restore camera" +#: ../src/gui/mainFrame.cpp:679 +msgid "Performance" msgstr "" -#: ../src/gui/mainFrame.cpp:3631 ../src/gui/mainFrame.cpp:3672 -msgid "Restored camera: " +#: ../src/gui/mainFrame.cpp:680 +msgid "Fast and weak randomisation." msgstr "" -#: ../src/gui/mainFrame.cpp:3649 -msgid "Stored camera: " +#: ../src/gui/mainFrame.cpp:682 +msgid "Limit Output Pts" msgstr "" -#: ../src/gui/mainFrame.cpp:3735 -msgid "Select an item from the filter tree before choosing a new filter" +#: ../src/gui/mainFrame.cpp:687 +msgid "Filter caching" msgstr "" -#: ../src/gui/mainFrame.cpp:3737 -msgid "Load data source (file->open) before choosing a new filter" +#: ../src/gui/mainFrame.cpp:689 +msgid "Max. Ram usage (%)" msgstr "" -#: ../src/gui/mainFrame.cpp:3763 -msgid "Select RNG File..." +#: ../src/gui/mainFrame.cpp:761 +msgid "Warning: Your configuration file appears to be invalid:\n" msgstr "" -#: ../src/gui/mainFrame.cpp:3784 -msgid "Failed reading range file." +#: ../src/gui/mainFrame.cpp:762 +msgid "\tConfig Load: " msgstr "" -#: ../src/gui/mainFrame.cpp:3788 -msgid "Error loading file" +#: ../src/gui/mainFrame.cpp:1060 +msgid "Current state has not been saved, would you like to save it now?" msgstr "" -#: ../src/gui/mainFrame.cpp:3849 ../src/gui/mainFrame.cpp:3944 -#: ../src/gui/mainFrame.cpp:5449 ../src/gui/mainFrame.cpp:5968 -msgid "Cons." +#: ../src/gui/mainFrame.cpp:1061 +msgid "State changed" msgstr "" -#: ../src/gui/mainFrame.cpp:3907 -msgid "Refresh Aborted." +#: ../src/gui/mainFrame.cpp:1079 +msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)" msgstr "" -#: ../src/gui/mainFrame.cpp:3948 -msgid "*Cons." +#: ../src/gui/mainFrame.cpp:1081 +msgid "XML State File (*.xml)" msgstr "" -#: ../src/gui/mainFrame.cpp:3950 -msgid "§Cons." +#: ../src/gui/mainFrame.cpp:1082 +msgid "POS File (*.pos)" msgstr "" -#: ../src/gui/mainFrame.cpp:4007 -msgid "Complete" +#: ../src/gui/mainFrame.cpp:1083 +msgid "LAWATAP ATO File (*.ato)" msgstr "" -#: ../src/gui/mainFrame.cpp:4105 -msgid "msgs" +#: ../src/gui/mainFrame.cpp:1084 +msgid "Text File (*.txt, *.csv)" msgstr "" -#: ../src/gui/mainFrame.cpp:4146 -msgid "Autosave complete." +#: ../src/gui/mainFrame.cpp:1085 +msgid "3Dap Files (*.ops)" msgstr "" -#: ../src/gui/mainFrame.cpp:4350 -msgid "Aborting...." +#: ../src/gui/mainFrame.cpp:1086 +msgid "All Files (*)" msgstr "" -#: ../src/gui/mainFrame.cpp:4416 -msgid "Updated." +#: ../src/gui/mainFrame.cpp:1099 ../src/gui/mainFrame.cpp:1148 +msgid "Select Data or State File..." msgstr "" -#: ../src/gui/mainFrame.cpp:4425 -msgid "Calculating..." +#: ../src/gui/mainFrame.cpp:1149 +msgid "" +"3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|" +"XML State File (*.xml)|*.xml|All Files (*)|*" msgstr "" -#: ../src/gui/mainFrame.cpp:4428 -msgid "\\% Done (Esc aborts)" +#: ../src/gui/mainFrame.cpp:1160 +msgid "Merged file." msgstr "" -#: ../src/gui/mainFrame.cpp:4430 -msgid "\\% Done" +#: ../src/gui/mainFrame.cpp:1263 +msgid "Tip: You can use ⌘ (command) to merge" msgstr "" -#: ../src/gui/mainFrame.cpp:4704 -msgid "Tip: You can shift-click to force full refresh, if required" +#: ../src/gui/mainFrame.cpp:1265 +msgid "Tip: You can use ctrl to merge" msgstr "" -#: ../src/gui/mainFrame.cpp:4766 -msgid "No data to save" +#: ../src/gui/mainFrame.cpp:1299 +msgid "Load error" msgstr "" -#: ../src/gui/mainFrame.cpp:4950 -msgid "Aborting..." +#: ../src/gui/mainFrame.cpp:1300 +msgid "" +"Error loading state file.\n" +"See console for more info." msgstr "" -#: ../src/gui/mainFrame.cpp:4956 +#: ../src/gui/mainFrame.cpp:1308 msgid "" -"Waiting for refresh to abort. Exiting could lead to the program " -"backgrounding. Exit anyway? " +"This state file contains filters that can be unsafe to run\n" +"Do you wish to remove these before continuing?." msgstr "" -#: ../src/gui/mainFrame.cpp:4957 ../src/gui/mainFrame.cpp:4977 -msgid "Confirmation request" +#: ../src/gui/mainFrame.cpp:1309 +msgid "Security warning" msgstr "" -#: ../src/gui/mainFrame.cpp:4976 -msgid "Are you sure you wish to exit 3Depict?" +#: ../src/gui/mainFrame.cpp:1499 ../src/gui/mainFrame.cpp:1595 +#: ../src/gui/mainFrame.cpp:2029 +msgid "Unable to save" msgstr "" -#: ../src/gui/mainFrame.cpp:5314 ../src/gl/cameras.cpp:627 -#: ../src/gl/cameras.cpp:730 -msgid "Orthogonal" +#: ../src/gui/mainFrame.cpp:1500 +msgid "No plot available. Please create a plot before exporting." msgstr "" -#: ../src/gui/mainFrame.cpp:5477 -msgid "Update Notice: New version " +#: ../src/gui/mainFrame.cpp:1504 +msgid "Save plot..." msgstr "" -#: ../src/gui/mainFrame.cpp:5477 -msgid " found online." +#: ../src/gui/mainFrame.cpp:1505 +msgid "" +"By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*." +"svg|PNG File (*.png)|*.png|All Files (*)|*" msgstr "" -#: ../src/gui/mainFrame.cpp:5481 -msgid "Online Check: " +#: ../src/gui/mainFrame.cpp:1559 +msgid "Select type for save" msgstr "" -#: ../src/gui/mainFrame.cpp:5481 -msgid " is up-to-date." +#: ../src/gui/mainFrame.cpp:1560 +msgid "Choose file type" msgstr "" -#: ../src/gui/mainFrame.cpp:5571 -msgid "An auto-save state was found, would you like to restore it?." +#: ../src/gui/mainFrame.cpp:1580 ../src/gui/mainFrame.cpp:1637 +#: ../src/gui/mainFrame.cpp:1673 +msgid "Choose resolution" msgstr "" -#: ../src/gui/mainFrame.cpp:5572 -msgid "Autosave" +#: ../src/gui/mainFrame.cpp:1596 +msgid "Unknown file extension. Please use \"svg\" or \"png\"" msgstr "" -#: ../src/gui/mainFrame.cpp:5579 -msgid "Unable to load autosave file.." +#: ../src/gui/mainFrame.cpp:1607 +msgid "Saved plot: " msgstr "" -#: ../src/gui/mainFrame.cpp:5770 -msgid "List of available filters" +#: ../src/gui/mainFrame.cpp:1614 ../src/gui/mainFrame.cpp:1666 +msgid "Save Image..." msgstr "" -#: ../src/gui/mainFrame.cpp:5772 -msgid "Tree - drag to move items, hold ⌘ for copy. Tap delete to remove items" +#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:1667 +msgid "PNG File (*.png)|*.png|All Files (*)|*" msgstr "" -#: ../src/gui/mainFrame.cpp:5774 -msgid "" -"Tree - drag to move items, hold Ctrl for copy. Tap delete to remove items." +#: ../src/gui/mainFrame.cpp:1629 +msgid "File already exists. Overwrite?" msgstr "" -#: ../src/gui/mainFrame.cpp:5776 -msgid "" -"Enable/Disable automatic updates of data when filter change takes effect" +#: ../src/gui/mainFrame.cpp:1630 ../src/gui/mainFrame.cpp:2425 +#: ../src/gui/mainFrame.cpp:2531 ../src/gui/mainFrame.cpp:2554 +msgid "Overwrite?" msgstr "" -#: ../src/gui/mainFrame.cpp:5779 -msgid "" -"Enable/Disable \"Alpha blending\" (transparency) in rendering system. " -"Blending is used to smooth objects (avoids artefacts known as \"jaggies\") " -"and to make transparent surfaces. Disabling will provide faster rendering " -"but look more blocky" +#: ../src/gui/mainFrame.cpp:1657 ../src/gui/mainFrame.cpp:1733 +msgid "Saved 3D View :" msgstr "" -#: ../src/gui/mainFrame.cpp:5780 -msgid "" -"Enable/Disable lighting calculations in rendering, for objects that request " -"this. Lighting provides important depth cues for objects comprised of 3D " -"surfaces. Disabling may allow faster rendering in complex scenes" +#: ../src/gui/mainFrame.cpp:1687 +msgid "Program limitation" msgstr "" -#: ../src/gui/mainFrame.cpp:5781 +#: ../src/gui/mainFrame.cpp:1688 msgid "" -"Enable/Disable weak randomisation (Galois linear feedback shift register). " -"Strong randomisation uses a much slower random selection method, but " -"provides better protection against inadvertent correlations, and is " -"recommended for final analyses" +"Limitation on the screenshot dimension; please ensure that both width and " +"height exceed the initial values,\n" +" or that they are smaller than the initial values.\n" +" If this bothers, please submit a bug." msgstr "" -#: ../src/gui/mainFrame.cpp:5783 -msgid "" -"Limit the number of points that can be displayed in the 3D scene. Does not " -"affect filter tree calculations. Disabling this can severely reduce " -"performance, due to large numbers of points being visible at once." +#: ../src/gui/mainFrame.cpp:1705 +msgid "Number of frames" msgstr "" -#: ../src/gui/mainFrame.cpp:5784 -msgid "" -"Enable/Disable caching of intermediate results during filter updates. " -"Disabling caching will use less system RAM, though changes to any filter " -"property will cause the entire filter tree to be recomputed, greatly slowing " -"computations" +#: ../src/gui/mainFrame.cpp:1759 +msgid "Abo&rt" msgstr "" -#: ../src/gui/mainFrame.cpp:5786 -msgid "Camera data information" +#: ../src/gui/mainFrame.cpp:1761 +msgid "&Refresh" msgstr "" -#: ../src/gui/mainFrame.cpp:5790 -msgid "Enable/disable visual effects on final 3D output" +#: ../src/gui/mainFrame.cpp:1870 +msgid "Cannot animate with no filters." msgstr "" -#: ../src/gui/mainFrame.cpp:5792 -msgid "Enable cropping post-process effect" +#: ../src/gui/mainFrame.cpp:1952 +msgid "Animating" msgstr "" -#: ../src/gui/mainFrame.cpp:5795 -msgid "" -"Colour based 3D effect enable/disable - requires appropriate colour filter " -"3D glasses." +#: ../src/gui/mainFrame.cpp:1953 +msgid "Performing refresh" msgstr "" -#: ../src/gui/mainFrame.cpp:5796 -msgid "Glasses colour mode" +#: ../src/gui/mainFrame.cpp:1979 +msgid "Filter property change failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5798 -msgid "" -"Level of separation between left and right images, which sets 3D depth to " -"visual distortion tradeoff" +#: ../src/gui/mainFrame.cpp:2001 +msgid "Refresh failed on frame :" msgstr "" -#: ../src/gui/mainFrame.cpp:5802 -msgid "X" +#: ../src/gui/mainFrame.cpp:2030 +msgid "Image save failed for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:5803 -msgid "Y" +#: ../src/gui/mainFrame.cpp:2055 +msgid "Ion save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5804 -msgid "Save raw data to file" +#: ../src/gui/mainFrame.cpp:2056 +msgid "Unable to save ions for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:5805 -msgid "Copy raw data to clipboard" +#: ../src/gui/mainFrame.cpp:2087 +msgid "Plot save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5806 -msgid "Manage \"stashed\" data." +#: ../src/gui/mainFrame.cpp:2088 +msgid "Unable to save plot or frame " msgstr "" -#: ../src/gui/mainFrame.cpp:5807 -msgid "Program text output" +#: ../src/gui/mainFrame.cpp:2129 +msgid "Range save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5808 -msgid "Select active camera, or type to create new named camera" +#: ../src/gui/mainFrame.cpp:2130 +msgid "Unable to save range for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:5809 -msgid "Remove the selected camera" +#: ../src/gui/mainFrame.cpp:2159 +msgid "Voxel save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5810 -msgid "Perform cropping from coordinate frame of camera" +#: ../src/gui/mainFrame.cpp:2160 +msgid "Unable to save voxels for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:5811 -msgid "" -"Set the maximum amount of RAM to use in order to speed repeat computations" +#: ../src/gui/mainFrame.cpp:2189 +msgid "Animate failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5812 -msgid "Collapse the filter tree" +#: ../src/gui/mainFrame.cpp:2213 ../src/gui/mainFrame.cpp:2379 +#: ../src/gui/mainFrame.cpp:2486 +msgid "No filters means no data to export" msgstr "" -#: ../src/gui/mainFrame.cpp:5813 -msgid "Expand the filter tree" +#: ../src/gui/mainFrame.cpp:2227 +msgid "Package name" msgstr "" -#: ../src/gui/mainFrame.cpp:5814 -msgid "Process the filter tree, hold shift to purge cached filter data" +#: ../src/gui/mainFrame.cpp:2228 +msgid "Package directory name" msgstr "" -#: ../src/gui/mainFrame.cpp:5928 -msgid "Crop" +#: ../src/gui/mainFrame.cpp:2230 +msgid "AnalysisPackage" msgstr "" -#: ../src/gui/mainFrame.cpp:5929 -msgid "Stereo" +#: ../src/gui/mainFrame.cpp:2243 +msgid "Package folder already exists, won't overwrite." msgstr "" -#: ../src/gui/mainFrame.cpp:5946 -#: ../src/backend/filters/externalProgram.cpp:596 -#: ../src/backend/filters/ionColour.cpp:308 -#: ../src/backend/filters/spectrumPlot.cpp:612 -msgid "Data" +#: ../src/gui/mainFrame.cpp:2244 +msgid "Not available" msgstr "" -#: ../src/gui/mainFrame.cpp:5947 -msgid "Cam" +#: ../src/gui/mainFrame.cpp:2269 +msgid "" +"Package folder creation failed\n" +"check writing to this location is possible." msgstr "" -#: ../src/gui/mainFrame.cpp:5948 -msgid "Post" +#: ../src/gui/mainFrame.cpp:2270 +msgid "Folder creation failed" msgstr "" -#: ../src/gui/mainFrame.cpp:5949 -msgid "Tools" +#: ../src/gui/mainFrame.cpp:2290 +msgid "Copying" msgstr "" -#: ../src/gui/mainFrame.cpp:5967 -msgid "Raw" +#: ../src/gui/mainFrame.cpp:2291 +msgid "Copying referenced files" msgstr "" -#: ../src/gui/mainFrame.cpp:6010 -msgid "Align Camera" +#: ../src/gui/mainFrame.cpp:2357 +msgid "Error copying file" msgstr "" -#: ../src/gui/mathglPane.cpp:259 -msgid "No plots selected." +#: ../src/gui/mainFrame.cpp:2366 +msgid "Saved package: " msgstr "" -#: ../src/gui/mathglPane.cpp:1201 -msgid "" -"Unable to allocate requested memory.\n" -" Try a lower resolution, or save as vector (SVG)." +#: ../src/gui/mainFrame.cpp:2390 +msgid "Export" msgstr "" -#: ../src/gui/mathglPane.cpp:1203 -msgid "Plotting functions returned an error:\n" +#: ../src/gui/mainFrame.cpp:2396 +msgid "" +"POS Data (*.pos)|*.pos|Text File (*.txt)|*.txt|VTK Legacy (*.vtk)|*.vtk|All " +"Files (*)|*" msgstr "" -#: ../src/gui/mathglPane.cpp:1205 -msgid "File readback check failed" +#: ../src/gui/mainFrame.cpp:2424 ../src/gui/mainFrame.cpp:2530 +msgid "File already exists, overwrite?" msgstr "" -#: ../src/gui/mathglPane.cpp:1207 -msgid "Filesize during readback appears to be zero." +#: ../src/gui/mainFrame.cpp:2465 +msgid "Saved ions: " msgstr "" -#: ../src/backend/filter.cpp:55 -msgid "2D Plot" +#: ../src/gui/mainFrame.cpp:2490 +msgid "Export Ranges" msgstr "" -#: ../src/backend/filter.cpp:56 -msgid "Draw" +#: ../src/gui/mainFrame.cpp:2512 +msgid "Save state..." msgstr "" -#: ../src/backend/filter.cpp:57 -msgid "Range" +#: ../src/gui/mainFrame.cpp:2513 +msgid "XML state file (*.xml)|*.xml|All Files (*)|*" msgstr "" -#: ../src/backend/filter.cpp:58 -msgid "Voxel" +#: ../src/gui/mainFrame.cpp:2553 +msgid "Files have been referred to using relative paths. Keep relative paths?" msgstr "" -#: ../src/backend/filter.cpp:192 ../src/backend/filters/ionColour.cpp:411 -msgid "Aborted" +#: ../src/gui/mainFrame.cpp:2586 +msgid "Saved state: " msgstr "" -#: ../src/backend/state.cpp:151 -msgid "" -"This file is a \"state\" file for the 3Depict program, and stores " -"information about a particular analysis session. This file should be a valid " -"\"XML\" file" +#: ../src/gui/mainFrame.cpp:2662 +msgid "Range editor" msgstr "" -#: ../src/backend/state.cpp:319 -msgid "Failed to allocate parser" +#: ../src/gui/mainFrame.cpp:2929 +msgid "Manual not found locally. Launching web browser" msgstr "" -#: ../src/backend/state.cpp:354 -msgid "" -"Unable to retrieve root node in input state file... Is this really a non-" -"empty XML file?" +#: ../src/gui/mainFrame.cpp:2938 +msgid "Opening contact page in external web browser" msgstr "" -#: ../src/backend/state.cpp:361 -msgid "Base state node missing. Is this really a state XML file??" +#: ../src/gui/mainFrame.cpp:2946 +msgid "No filter stashes to edit." msgstr "" -#: ../src/backend/state.cpp:390 -msgid "State was created by a newer version of this program.. " +#: ../src/gui/mainFrame.cpp:2950 +msgid "Filter Stashes" msgstr "" -#: ../src/backend/state.cpp:391 -msgid "file reading will continue, but may fail." +#: ../src/gui/mainFrame.cpp:2967 +msgid "Quick and dirty analysis for point data." msgstr "" -#: ../src/backend/state.cpp:396 -msgid "" -"Warning, unparseable version number in state file. File reading will " -"continue, but may fail" +#: ../src/gui/mainFrame.cpp:2977 +msgid "Compiled with wx Version: " msgstr "" -#: ../src/backend/state.cpp:403 -msgid "Unable to find the \"writer\" node" +#: ../src/gui/mainFrame.cpp:2998 +msgid "Press enter to store new stash" msgstr "" -#: ../src/backend/state.cpp:413 -msgid "Unable to find the \"backcolour\" node." +#: ../src/gui/mainFrame.cpp:3004 +msgid "Press enter to restore stash" msgstr "" -#: ../src/backend/state.cpp:420 -msgid "\"backcolour\" node missing \"r\" value." +#: ../src/gui/mainFrame.cpp:3037 +msgid "Unable to create stash, selection invalid" msgstr "" -#: ../src/backend/state.cpp:425 -msgid "Unable to interpret \"backColour\" node's \"r\" value." +#: ../src/gui/mainFrame.cpp:3044 +msgid "Created new filter tree stash" msgstr "" -#: ../src/backend/state.cpp:433 -msgid "\"backcolour\" node missing \"g\" value." +#: ../src/gui/mainFrame.cpp:3156 +msgid "Filter type not a data source - can't be at tree base" msgstr "" -#: ../src/backend/state.cpp:439 -msgid "Unable to interpret \"backColour\" node's \"g\" value." +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete\tDel" msgstr "" -#: ../src/backend/state.cpp:447 -msgid "\"backcolour\" node missing \"b\" value." +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete the selected filter" msgstr "" -#: ../src/backend/state.cpp:453 -msgid "Unable to interpret \"backColour\" node's \"b\" value." +#: ../src/gui/mainFrame.cpp:3351 +msgid "Moving - Hold ⌘ (command) to copy, shift to splice" msgstr "" -#: ../src/backend/state.cpp:460 -msgid "\"backcolour\"s rgb values must be in range [0,1]" +#: ../src/gui/mainFrame.cpp:3353 +msgid "Moving - Hold control to copy, shift to splice" msgstr "" -#: ../src/backend/state.cpp:488 -msgid "Unable to find or interpret \"showaxis\" node" +#: ../src/gui/mainFrame.cpp:3696 +msgid "Press enter to store new camera" msgstr "" -#: ../src/backend/state.cpp:532 -msgid "Unable to locate \"filtertree\" node." +#: ../src/gui/mainFrame.cpp:3698 +msgid "Press enter to restore camera" msgstr "" -#: ../src/backend/state.cpp:548 -msgid "Cameras section missing \"active\" node." +#: ../src/gui/mainFrame.cpp:3723 ../src/gui/mainFrame.cpp:3764 +msgid "Restored camera: " msgstr "" -#: ../src/backend/state.cpp:556 -msgid "Unable to find property \"value\" for \"cameras->active\" node." +#: ../src/gui/mainFrame.cpp:3741 +msgid "Stored camera: " msgstr "" -#: ../src/backend/state.cpp:562 -msgid "Unable to interpret property \"value\" for \"cameras->active\" node." +#: ../src/gui/mainFrame.cpp:3827 +msgid "Select an item from the filter tree before choosing a new filter" msgstr "" -#: ../src/backend/state.cpp:582 -msgid "Failed to interpret camera state for camera : " +#: ../src/gui/mainFrame.cpp:3829 +msgid "Load data source (file->open) before choosing a new filter" msgstr "" -#: ../src/backend/state.cpp:590 -msgid "Unable to interpret the camera type for camera : " +#: ../src/gui/mainFrame.cpp:3855 +msgid "Select RNG File..." msgstr "" -#: ../src/backend/state.cpp:648 -msgid "Unable to locate stash name for stash " +#: ../src/gui/mainFrame.cpp:3876 +msgid "Failed reading range file." msgstr "" -#: ../src/backend/state.cpp:655 -msgid "Empty stash name for stash " +#: ../src/gui/mainFrame.cpp:3880 +msgid "Error loading file" msgstr "" -#: ../src/backend/state.cpp:664 -msgid "No filter tree for stash:" +#: ../src/gui/mainFrame.cpp:3941 ../src/gui/mainFrame.cpp:4042 +#: ../src/gui/mainFrame.cpp:5554 ../src/gui/mainFrame.cpp:6073 +msgid "Cons." msgstr "" -#: ../src/backend/state.cpp:670 -msgid "For stash " +#: ../src/gui/mainFrame.cpp:4005 +msgid "Refresh Aborted." msgstr "" -#: ../src/backend/state.cpp:702 -msgid "Unrecognised effect :" +#: ../src/gui/mainFrame.cpp:4046 +msgid "*Cons." msgstr "" -#: ../src/backend/state.cpp:712 -msgid "Duplicate effect found" +#: ../src/gui/mainFrame.cpp:4048 +msgid "§Cons." msgstr "" -#: ../src/backend/state.cpp:712 -msgid " cannot use." +#: ../src/gui/mainFrame.cpp:4110 +msgid "Complete" msgstr "" -#: ../src/backend/state.cpp:722 -msgid "Error reading effect : " +#: ../src/gui/mainFrame.cpp:4208 +msgid "msgs" msgstr "" -#: ../src/backend/state.cpp:927 -msgid "-merge" +#: ../src/gui/mainFrame.cpp:4249 +msgid "Autosave complete." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 -#: ../src/backend/APT/APTFileIO.cpp:103 -msgid "Error opening file" +#: ../src/gui/mainFrame.cpp:4453 +msgid "Aborting...." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:45 -msgid "Only found header, no data" +#: ../src/gui/mainFrame.cpp:4519 +msgid "Updated." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:46 -msgid "Unable to reopen file after first scan" +#: ../src/gui/mainFrame.cpp:4528 +msgid "Calculating..." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:47 -msgid "Error whilst reading file contents" +#: ../src/gui/mainFrame.cpp:4531 +msgid "% Done (Esc aborts)" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 -msgid "Unexpected file format" +#: ../src/gui/mainFrame.cpp:4533 +msgid "% Done" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:50 -msgid "Insufficient memory to continue" +#: ../src/gui/mainFrame.cpp:4808 +msgid "Tip: You can shift-click to force full refresh, if required" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:54 -msgid "Memory allocation failure on POS load" +#: ../src/gui/mainFrame.cpp:4870 +msgid "No data to save" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:55 -msgid "Error opening pos file" +#: ../src/gui/mainFrame.cpp:5052 +msgid "Aborting..." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:56 -msgid "Pos file empty" +#: ../src/gui/mainFrame.cpp:5058 +msgid "" +"Waiting for refresh to abort. Exiting could lead to the program " +"backgrounding. Exit anyway? " msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:57 -msgid "Pos file size appears to have non-integer number of entries" +#: ../src/gui/mainFrame.cpp:5059 ../src/gui/mainFrame.cpp:5079 +msgid "Confirmation request" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:58 -msgid "Error reading from pos file (after open)" +#: ../src/gui/mainFrame.cpp:5078 +msgid "Are you sure you wish to exit 3Depict?" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:59 -msgid "Error - Found NaN in pos file" +#: ../src/gui/mainFrame.cpp:5582 +msgid "Update Notice: New version " msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:60 -msgid "Error - Found Inf in pos file" +#: ../src/gui/mainFrame.cpp:5582 +msgid " found online." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:61 -msgid "Pos load aborted by interrupt." +#: ../src/gui/mainFrame.cpp:5586 +msgid "Online Check: " msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:80 -msgid "No numerical data found" +#: ../src/gui/mainFrame.cpp:5586 +msgid " is up-to-date." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:81 -msgid "Error re-opening file, after first scan" +#: ../src/gui/mainFrame.cpp:5676 +msgid "An auto-save state was found, would you like to restore it?." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:82 -msgid "Unable to read file contents after open" +#: ../src/gui/mainFrame.cpp:5677 +msgid "Autosave" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:83 -msgid "Error interpreting field in file" +#: ../src/gui/mainFrame.cpp:5684 +msgid "Unable to load autosave file.." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:84 -msgid "Incorrect number of fields in file" +#: ../src/gui/mainFrame.cpp:5875 +msgid "List of available filters" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 -msgid "Unable to allocate memory to store data" +#: ../src/gui/mainFrame.cpp:5877 +msgid "" +"Tree - drag to move items, hold ⌘ for copy, shift for splice. Tap delete to " +"remove items, multi-click to rename" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:104 -msgid "File is empty" +#: ../src/gui/mainFrame.cpp:5879 +msgid "" +"Tree - drag to move items, hold Ctrl for copy, shift for splice. Tap delete " +"to remove items, multi-click to rename." msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:105 -msgid "Filesize does not match expected format" +#: ../src/gui/mainFrame.cpp:5881 +msgid "" +"Enable/Disable automatic updates of data when filter change takes effect" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:106 -msgid "File version number not <4, as expected" +#: ../src/gui/mainFrame.cpp:5884 +msgid "" +"Enable/Disable \"Alpha blending\" (transparency) in rendering system. " +"Blending is used to smooth objects (avoids artefacts known as \"jaggies\") " +"and to make transparent surfaces. Disabling will provide faster rendering " +"but look more blocky" msgstr "" -#: ../src/backend/APT/APTFileIO.cpp:108 -msgid "Unable to detect endian-ness in file" +#: ../src/gui/mainFrame.cpp:5885 +msgid "" +"Enable/Disable lighting calculations in rendering, for objects that request " +"this. Lighting provides important depth cues for objects comprised of 3D " +"surfaces. Disabling may allow faster rendering in complex scenes" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:48 -msgid "Error opening file, check name and permissions." +#: ../src/gui/mainFrame.cpp:5886 +msgid "" +"Enable/Disable weak randomisation (Galois linear feedback shift register). " +"Strong randomisation uses a much slower random selection method, but " +"provides better protection against inadvertent correlations, and is " +"recommended for final analyses" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:49 +#: ../src/gui/mainFrame.cpp:5888 msgid "" -"Error interpreting range file header, expecting ion count and range count, " -"respectively." +"Limit the number of points that can be displayed in the 3D scene. Does not " +"affect filter tree calculations. Disabling this can severely reduce " +"performance, due to large numbers of points being visible at once." msgstr "" -#: ../src/backend/APT/APTRanges.cpp:50 +#: ../src/gui/mainFrame.cpp:5889 msgid "" -"Range file appears to be empty, check file is a proper range file and is not " -"empty." +"Enable/Disable caching of intermediate results during filter updates. " +"Disabling caching will use less system RAM, though changes to any filter " +"property will cause the entire filter tree to be recomputed, greatly slowing " +"computations" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:51 -msgid "Error reading the long name for ion." +#: ../src/gui/mainFrame.cpp:5891 +msgid "Camera data information" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:52 -msgid "Error reading the short name for ion." +#: ../src/gui/mainFrame.cpp:5895 +msgid "Enable/disable visual effects on final 3D output" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:53 -msgid "" -"Error reading colour data in the file, expecting 3 decimal values, space " -"separated." +#: ../src/gui/mainFrame.cpp:5897 +msgid "Enable cropping post-process effect" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:54 +#: ../src/gui/mainFrame.cpp:5900 msgid "" -"Tried skipping to table separator line (line with dashes), but did not find " -"it." +"Colour based 3D effect enable/disable - requires appropriate colour filter " +"3D glasses." msgstr "" -#: ../src/backend/APT/APTRanges.cpp:55 -msgid "" -"Number of ions in the table header did not match the number specified at the " -"start of the file" +#: ../src/gui/mainFrame.cpp:5901 +msgid "Glasses colour mode" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:56 +#: ../src/gui/mainFrame.cpp:5903 msgid "" -"Unexpected failure whilst trying to skip over range lead-in data (bit before " -"range start value)" +"Level of separation between left and right images, which sets 3D depth to " +"visual distortion tradeoff" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:57 -msgid "" -"Range table had an incorrect number of entries, should be 2 or 3 + number of " -"ranges" +#: ../src/gui/mainFrame.cpp:5907 +msgid "X" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:58 -msgid "Unable to read range start and end values" +#: ../src/gui/mainFrame.cpp:5908 +msgid "Y" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:59 -msgid "Unable to read range table entry" +#: ../src/gui/mainFrame.cpp:5909 +msgid "Save raw data to file" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:60 -msgid "" -"Error reading file, unexpected format, are you sure it is a proper range " -"file?" +#: ../src/gui/mainFrame.cpp:5910 +msgid "Copy raw data to clipboard" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:61 -msgid "" -"Too many ranges appeared to have range entries with no usable data (eg, all " -"blank)" +#: ../src/gui/mainFrame.cpp:5911 +msgid "Manage \"stashed\" data." msgstr "" -#: ../src/backend/APT/APTRanges.cpp:62 -msgid "" -"Range file appears to contain malformed data, check things like start and " -"ends of m/c are not equal or flipped." +#: ../src/gui/mainFrame.cpp:5912 +msgid "Program text output" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:63 -msgid "Range file appears to be inconsistent (eg, overlapping ranges)" +#: ../src/gui/mainFrame.cpp:5913 +msgid "Select active camera, or type to create new named camera" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:64 -msgid "No ion name mapping found for multiple ion." +#: ../src/gui/mainFrame.cpp:5914 +msgid "Remove the selected camera" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:65 -msgid "Polyatomic extension range matches multiple masses in first section" +#: ../src/gui/mainFrame.cpp:5915 +msgid "Perform cropping from coordinate frame of camera" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:66 -msgid "Range file is exceedingly large. Refusing to open" +#: ../src/gui/mainFrame.cpp:5916 +msgid "" +"Set the maximum amount of RAM to use in order to speed repeat computations" msgstr "" -#: ../src/backend/APT/APTRanges.cpp:1404 -msgid "" -"Range headings do not match order of the ions listed in the name " -"specifications. The name specification ordering will be used when reading " -"the range table, as the range heading section is declared as a comment in " -"the file-format specifications, and is not to be intepreted by this program. " -"Check range-species associations actually match what you expect." +#: ../src/gui/mainFrame.cpp:5917 +msgid "Collapse the filter tree" msgstr "" -#: ../src/backend/filters/annotation.cpp:73 -msgid "Arrow" +#: ../src/gui/mainFrame.cpp:5918 +msgid "Expand the filter tree" msgstr "" -#: ../src/backend/filters/annotation.cpp:74 -msgid "Text" +#: ../src/gui/mainFrame.cpp:5919 +msgid "Process the filter tree, hold shift to purge cached filter data" msgstr "" -#: ../src/backend/filters/annotation.cpp:75 -msgid "Arrow+Text" +#: ../src/gui/mainFrame.cpp:6033 +msgid "Crop" msgstr "" -#: ../src/backend/filters/annotation.cpp:76 -msgid "Angle" +#: ../src/gui/mainFrame.cpp:6034 +msgid "Stereo" msgstr "" -#: ../src/backend/filters/annotation.cpp:77 -msgid "Ruler" +#: ../src/gui/mainFrame.cpp:6051 ../src/backend/filters/externalProgram.cpp:596 +#: ../src/backend/filters/ionColour.cpp:352 +#: ../src/backend/filters/spectrumPlot.cpp:615 +msgid "Data" +msgstr "" + +#: ../src/gui/mainFrame.cpp:6052 +msgid "Cam" +msgstr "" + +#: ../src/gui/mainFrame.cpp:6053 +msgid "Post" msgstr "" -#: ../src/backend/filters/annotation.cpp:524 -msgid "Enable" +#: ../src/gui/mainFrame.cpp:6054 +msgid "Tools" msgstr "" -#: ../src/backend/filters/annotation.cpp:527 -msgid "Enable/disable annotation" +#: ../src/gui/mainFrame.cpp:6072 +msgid "Raw" msgstr "" -#: ../src/backend/filters/annotation.cpp:548 -msgid "Type or style of annotation" +#: ../src/gui/mainFrame.cpp:6115 +msgid "Align Camera" msgstr "" -#: ../src/backend/filters/annotation.cpp:564 -#: ../src/backend/filters/annotation.cpp:668 -msgid "Text of annotation" +#: ../src/gui/mathglPane.cpp:264 +msgid "No plots selected." msgstr "" -#: ../src/backend/filters/annotation.cpp:568 -#: ../src/backend/filters/ionClip.cpp:529 -#: ../src/backend/filters/ionClip.cpp:551 -#: ../src/backend/filters/ionClip.cpp:573 -#: ../src/backend/filters/ionClip.cpp:610 -#: ../src/backend/filters/transform.cpp:1233 -#: ../src/backend/filters/transform.cpp:1260 -#: ../src/backend/filters/transform.cpp:1286 -#: ../src/backend/filters/profile.cpp:1013 -#: ../src/backend/filters/profile.cpp:1051 -#: ../src/backend/filters/spatialAnalysis.cpp:1041 ../src/gl/cameras.cpp:603 -msgid "Origin" +#: ../src/gui/mathglPane.cpp:1228 +msgid "" +"Unable to allocate requested memory.\n" +" Try a lower resolution, or save as vector (SVG)." msgstr "" -#: ../src/backend/filters/annotation.cpp:572 -msgid "Position of annotation" +#: ../src/gui/mathglPane.cpp:1230 +msgid "Plotting functions returned an error:\n" msgstr "" -#: ../src/backend/filters/annotation.cpp:576 -#: ../src/backend/filters/annotation.cpp:683 -#: ../src/backend/filters/annotation.cpp:742 -#: ../src/backend/filters/annotation.cpp:831 -msgid "Up dir" +#: ../src/gui/mathglPane.cpp:1232 +msgid "File readback check failed" msgstr "" -#: ../src/backend/filters/annotation.cpp:580 -#: ../src/backend/filters/annotation.cpp:835 -msgid "Vector for up direction of annotation text" +#: ../src/gui/mathglPane.cpp:1234 +msgid "Filesize during readback appears to be zero." msgstr "" -#: ../src/backend/filters/annotation.cpp:584 -#: ../src/backend/filters/annotation.cpp:690 -#: ../src/backend/filters/annotation.cpp:734 -#: ../src/backend/filters/annotation.cpp:839 -msgid "Across dir" +#: ../src/3Depict.cpp:399 +msgid "File : " msgstr "" -#: ../src/backend/filters/annotation.cpp:588 -#: ../src/backend/filters/annotation.cpp:843 -msgid "Reading direction for annotation" +#: ../src/3Depict.cpp:399 +msgid " does not exist. Skipping" msgstr "" -#: ../src/backend/filters/annotation.cpp:593 -#: ../src/backend/filters/annotation.cpp:675 -#: ../src/backend/filters/annotation.cpp:769 -msgid "Text size" +#: ../src/backend/configFile.cpp:187 +msgid "Config file present, but is not valid (root node test)" msgstr "" -#: ../src/backend/filters/annotation.cpp:597 -#: ../src/backend/filters/annotation.cpp:679 -#: ../src/backend/filters/annotation.cpp:851 -msgid "Relative size of annotation text" +#: ../src/backend/configFile.cpp:228 +msgid "Unable to interpret recent file entry" msgstr "" -#: ../src/backend/filters/annotation.cpp:609 -#: ../src/backend/filters/annotation.cpp:650 -msgid "3D position for tail of arrow" +#: ../src/backend/configFile.cpp:268 +msgid "Unable to determine filter type in defaults listing." msgstr "" -#: ../src/backend/filters/annotation.cpp:617 -#: ../src/backend/filters/annotation.cpp:659 -msgid "3D Position to which arrow points" +#: ../src/backend/configFile.cpp:605 +msgid "Online access for non win32/apple platforms is intentionally disabled, " msgstr "" -#: ../src/backend/filters/annotation.cpp:620 -#: ../src/backend/filters/annotation.cpp:730 -msgid "Positioning" +#: ../src/backend/configFile.cpp:606 +msgid "" +"regardless of the settings you use here. Use your package manager to keep up-" +"to-date" msgstr "" -#: ../src/backend/filters/annotation.cpp:625 -#: ../src/backend/filters/annotation.cpp:697 -msgid "Tip radius" +#: ../src/backend/plot.cpp:28 ../src/backend/filters/algorithms/mass.cpp:25 +#: ../src/backend/filters/voxelise.cpp:130 +#: ../src/backend/filters/voxelise.cpp:136 +#: ../src/backend/filters/spectrumPlot.cpp:76 +msgid "None" msgstr "" -#: ../src/backend/filters/annotation.cpp:629 -msgid "Size of the arrow head" +#: ../src/backend/plot.cpp:29 +msgid "Moving avg." msgstr "" -#: ../src/backend/filters/annotation.cpp:633 -msgid "Line size" +#: ../src/backend/plot.cpp:33 +msgid "Lines" msgstr "" -#: ../src/backend/filters/annotation.cpp:637 -msgid "Thickness of line used to draw arrow stem" +#: ../src/backend/plot.cpp:34 +msgid "Bars" msgstr "" -#: ../src/backend/filters/annotation.cpp:671 -msgid "Options" +#: ../src/backend/plot.cpp:35 +msgid "Steps" msgstr "" -#: ../src/backend/filters/annotation.cpp:707 -msgid "Position A" +#: ../src/backend/plot.cpp:36 +msgid "Stem" msgstr "" -#: ../src/backend/filters/annotation.cpp:711 -msgid "Location of first non-central vertex" +#: ../src/backend/plot.cpp:37 +msgid "Points" msgstr "" -#: ../src/backend/filters/annotation.cpp:715 -msgid "Origin " +#: ../src/backend/plot.cpp:39 +msgid "Density" msgstr "" -#: ../src/backend/filters/annotation.cpp:719 -msgid "Location of central vertex" +#: ../src/backend/plot.cpp:40 +msgid "Scatter" msgstr "" -#: ../src/backend/filters/annotation.cpp:723 -msgid "Position B" +#: ../src/backend/plot.cpp:746 ../src/backend/plot.cpp:754 +msgid "Multiple data types" msgstr "" -#: ../src/backend/filters/annotation.cpp:727 -msgid "Location of second non-central vertex" +#: ../src/backend/plot.cpp:1577 +msgid "error" msgstr "" -#: ../src/backend/filters/annotation.cpp:738 -msgid "Reading direction for angle text" +#: ../src/backend/plot.cpp:1818 +msgid "Amplitude" msgstr "" -#: ../src/backend/filters/annotation.cpp:743 -msgid "Vector for up direction of angle text" +#: ../src/backend/filtertree.cpp:1150 +msgid "WARNING: Skipping node " msgstr "" -#: ../src/backend/filters/annotation.cpp:751 -msgid "Reflexive" +#: ../src/backend/filtertree.cpp:1150 +msgid " as it was not recognised" msgstr "" -#: ../src/backend/filters/annotation.cpp:754 -msgid "Measure interor (enabled) or exterior angle (disabled)" +#: ../src/backend/filtertree.cpp:1188 +msgid "Error processing node: " msgstr "" -#: ../src/backend/filters/annotation.cpp:759 -msgid "Show Angle" +#: ../src/backend/filters/externalProgram.cpp:259 +msgid "Collate Input" msgstr "" -#: ../src/backend/filters/annotation.cpp:763 -msgid "Display angle text (when enabled)" +#: ../src/backend/filters/externalProgram.cpp:348 +msgid "Execute" msgstr "" -#: ../src/backend/filters/annotation.cpp:773 -msgid "Size of angle text" +#: ../src/backend/filters/externalProgram.cpp:389 +msgid "Collate output" msgstr "" -#: ../src/backend/filters/annotation.cpp:791 -msgid "Digit format" +#: ../src/backend/filters/externalProgram.cpp:564 +#: ../src/backend/filters/externalProgram.cpp:578 +msgid "Command" msgstr "" -#: ../src/backend/filters/annotation.cpp:795 +#: ../src/backend/filters/externalProgram.cpp:567 msgid "" -"Format of angle text; # for numeral position, '.' for separator, eg ##.## " -"gives 12.34" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:801 -#: ../src/backend/filters/annotation.cpp:886 -msgid "Sphere size" +"Full command to send to operating system. See manual for escape sequence " +"meanings" msgstr "" -#: ../src/backend/filters/annotation.cpp:805 -#: ../src/backend/filters/annotation.cpp:890 -msgid "Marker sphere size for manipulating tool" +#: ../src/backend/filters/externalProgram.cpp:571 +msgid "Work Dir" msgstr "" -#: ../src/backend/filters/annotation.cpp:819 -msgid "Ruler beginning 3D location" +#: ../src/backend/filters/externalProgram.cpp:574 +msgid "Directory to run the command in" msgstr "" -#: ../src/backend/filters/annotation.cpp:827 -msgid "Ruler finish 3D location" +#: ../src/backend/filters/externalProgram.cpp:581 +msgid "Cleanup input" msgstr "" -#: ../src/backend/filters/annotation.cpp:848 -#: ../src/backend/filters/boundingBox.cpp:715 -msgid "Font Size" +#: ../src/backend/filters/externalProgram.cpp:584 +msgid "Erase input files when command completed" msgstr "" -#: ../src/backend/filters/annotation.cpp:857 -msgid "Fixed ticks" +#: ../src/backend/filters/externalProgram.cpp:589 +msgid "Cache" msgstr "" -#: ../src/backend/filters/annotation.cpp:860 +#: ../src/backend/filters/externalProgram.cpp:592 msgid "" -"Use fixed (enabled) number of text markers, or one every fixed distance " -"(disabled)" +"Assume program does not alter its output, unless inputs from 3Depict are " +"altered" msgstr "" -#: ../src/backend/filters/annotation.cpp:867 -msgid "Num Ticks" +#: ../src/backend/filters/algorithms/mass.cpp:26 +msgid "Flat TOF" msgstr "" -#: ../src/backend/filters/annotation.cpp:870 -msgid "Number of tick marks along ruler" +#: ../src/backend/filters/algorithms/mass.cpp:33 +msgid "INsufficient bins to perform fit" msgstr "" -#: ../src/backend/filters/annotation.cpp:877 -msgid "Tick Spacing" +#: ../src/backend/filters/algorithms/mass.cpp:34 +msgid "Insufficient counts to perform fit" msgstr "" -#: ../src/backend/filters/annotation.cpp:880 -msgid "Distance between tick marks along ruler" +#: ../src/backend/filters/algorithms/mass.cpp:35 +msgid "Insufficient data to perform fit" msgstr "" -#: ../src/backend/filters/annotation.cpp:904 -msgid "Colour for ruler and ticks" +#: ../src/backend/filters/algorithms/mass.cpp:36 +msgid "Data did not appear to be random noise - cannot fit noise level" msgstr "" #: ../src/backend/filters/ionClip.cpp:65 ../src/backend/filters/profile.cpp:53 @@ -2616,7 +2399,7 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:498 -#: ../src/backend/filters/profile.cpp:991 +#: ../src/backend/filters/profile.cpp:995 msgid "Primitive" msgstr "" @@ -2625,7 +2408,7 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:507 -#: ../src/backend/filters/profile.cpp:997 +#: ../src/backend/filters/profile.cpp:1001 msgid "Show Primitive" msgstr "" @@ -2644,21 +2427,20 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:532 -#: ../src/backend/filters/profile.cpp:1054 +#: ../src/backend/filters/profile.cpp:1058 msgid "Position for centre of sphere" msgstr "" #: ../src/backend/filters/ionClip.cpp:537 #: ../src/backend/filters/ionClip.cpp:597 -#: ../src/backend/filters/profile.cpp:1037 -#: ../src/backend/filters/profile.cpp:1059 #: ../src/backend/filters/spatialAnalysis.cpp:134 -#: ../src/backend/filters/spatialAnalysis.cpp:1058 +#: ../src/backend/filters/profile.cpp:1041 +#: ../src/backend/filters/profile.cpp:1063 msgid "Radius" msgstr "" #: ../src/backend/filters/ionClip.cpp:540 -#: ../src/backend/filters/profile.cpp:1062 +#: ../src/backend/filters/profile.cpp:1066 msgid "Radius of sphere" msgstr "" @@ -2679,2105 +2461,2276 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:581 -#: ../src/backend/filters/transform.cpp:1294 -#: ../src/backend/filters/profile.cpp:1021 -#: ../src/backend/filters/spatialAnalysis.cpp:1049 +#: ../src/backend/filters/spatialAnalysis.cpp:947 +#: ../src/backend/filters/profile.cpp:1025 +#: ../src/backend/filters/transform.cpp:1293 msgid "Axis" msgstr "" -#: ../src/backend/filters/ionClip.cpp:584 -msgid "Positive vector for cylinder" +#: ../src/backend/filters/ionClip.cpp:584 +msgid "Positive vector for cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:589 +#: ../src/backend/filters/profile.cpp:1033 +msgid "Lock Axis Mag." +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:592 +msgid "Prevent changing length of cylinder during 3D interaction" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:600 +#: ../src/backend/filters/profile.cpp:1044 +msgid "Radius of cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:613 +msgid "Centre of axis aligned box" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:618 +msgid "Corner offset" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:621 +msgid "Vector to corner of box" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:84 +#: ../src/backend/filters/clusterAnalysis.cpp:1060 +msgid "Size Distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:85 +msgid "Chemistry Distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:503 +msgid "No range data. Can't cluster." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:514 +msgid "" +"No ranges selected for cluster \"core\". Cannot continue with clustering." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:523 +msgid "" +"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:689 +msgid "Morphology Plot" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:690 +msgid "\\lambda_1:\\lambda_2 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:691 +msgid "\\lambda_2:\\lambda_3 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:736 +msgid "No clusters had sufficient dimensionality to compute singular values" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:794 +msgid "Found :" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:796 +msgid " clusters" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:888 +msgid "Compositions (fractional, core+bulk)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:890 +msgid "Compositions (fractional, core only)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:908 +msgid "Frequencies (core+bulk)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:939 +msgid "Core Link + Erode" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:943 +#: ../src/backend/filters/clusterAnalysis.cpp:951 +#: ../src/backend/filters/spatialAnalysis.cpp:707 +#: ../src/backend/filters/spatialAnalysis.cpp:715 +#: ../src/backend/filters/transform.cpp:1156 +#: ../src/backend/filters/ionInfo.cpp:549 +msgid "Algorithm" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:947 +msgid "Cluster algorithm mode" msgstr "" -#: ../src/backend/filters/ionClip.cpp:589 -#: ../src/backend/filters/profile.cpp:1029 -msgid "Lock Axis Mag." +#: ../src/backend/filters/clusterAnalysis.cpp:958 +msgid "Core Classify" msgstr "" -#: ../src/backend/filters/ionClip.cpp:592 -msgid "Prevent changing length of cylinder during 3D interaction" +#: ../src/backend/filters/clusterAnalysis.cpp:961 +msgid "" +"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" msgstr "" -#: ../src/backend/filters/ionClip.cpp:600 -#: ../src/backend/filters/profile.cpp:1040 -#: ../src/backend/filters/spatialAnalysis.cpp:1061 -msgid "Radius of cylinder" +#: ../src/backend/filters/clusterAnalysis.cpp:967 +msgid "Core Classify Dist" msgstr "" -#: ../src/backend/filters/ionClip.cpp:613 -msgid "Centre of axis aligned box" +#: ../src/backend/filters/clusterAnalysis.cpp:970 +msgid "Restrict only atoms by distance to be cluster sources" msgstr "" -#: ../src/backend/filters/ionClip.cpp:618 -msgid "Corner offset" +#: ../src/backend/filters/clusterAnalysis.cpp:975 +msgid "Classify Knn Max" msgstr "" -#: ../src/backend/filters/ionClip.cpp:621 -msgid "Vector to corner of box" +#: ../src/backend/filters/clusterAnalysis.cpp:978 +msgid "" +"Require that the kth NN (this number) is within the classify distance, to be " +"a cluster source" msgstr "" -#: ../src/backend/filters/voxelise.cpp:111 -msgid "None (Raw count)" +#: ../src/backend/filters/clusterAnalysis.cpp:984 +msgid "Core Link Dist" msgstr "" -#: ../src/backend/filters/voxelise.cpp:112 -msgid "Volume (Density)" +#: ../src/backend/filters/clusterAnalysis.cpp:987 +msgid "Distance between clusters to allow linking" msgstr "" -#: ../src/backend/filters/voxelise.cpp:113 -msgid "All Ions (conc)" +#: ../src/backend/filters/clusterAnalysis.cpp:992 +msgid "Bulk Link" msgstr "" -#: ../src/backend/filters/voxelise.cpp:114 -msgid "Ratio (Num/Denom)" +#: ../src/backend/filters/clusterAnalysis.cpp:995 +#: ../src/backend/filters/clusterAnalysis.cpp:1012 +msgid "Enable linking of non-cluster species - eg for composition analysis " msgstr "" -#: ../src/backend/filters/voxelise.cpp:118 -msgid "Point Cloud" +#: ../src/backend/filters/clusterAnalysis.cpp:1002 +msgid "Bulk Link (Envelope) Dist" msgstr "" -#: ../src/backend/filters/voxelise.cpp:119 -msgid "Isosurface" +#: ../src/backend/filters/clusterAnalysis.cpp:1005 +msgid "" +"Distance from core points that form cluster that is used to grab surrounding " +"bulk points" msgstr "" -#: ../src/backend/filters/voxelise.cpp:120 -msgid "Axial slice" +#: ../src/backend/filters/clusterAnalysis.cpp:1009 +msgid "Erosion" msgstr "" -#: ../src/backend/filters/voxelise.cpp:124 -#: ../src/backend/filters/voxelise.cpp:130 -#: ../src/backend/filters/algorithms/mass.cpp:25 -#: ../src/backend/filters/spectrumPlot.cpp:76 ../src/backend/plot.cpp:28 -msgid "None" +#: ../src/backend/filters/clusterAnalysis.cpp:1018 +msgid "Erode Dist" msgstr "" -#: ../src/backend/filters/voxelise.cpp:125 -msgid "Gaussian (blur)" +#: ../src/backend/filters/clusterAnalysis.cpp:1021 +msgid "" +"Distance from unclustered material in which bulk points are eroded from " +"cluster" msgstr "" -#: ../src/backend/filters/voxelise.cpp:126 -msgid "Lapl. of Gauss. (edges)" +#: ../src/backend/filters/clusterAnalysis.cpp:1028 +msgid "Clustering Params" msgstr "" -#: ../src/backend/filters/voxelise.cpp:131 -msgid "Linear" +#: ../src/backend/filters/clusterAnalysis.cpp:1033 +msgid "Size Cropping" msgstr "" -#: ../src/backend/filters/voxelise.cpp:564 -msgid "Voxel Limits (min,max): (" +#: ../src/backend/filters/clusterAnalysis.cpp:1036 +msgid "Remove clusters based upon size distribution" msgstr "" -#: ../src/backend/filters/voxelise.cpp:709 -msgid "Fixed width" +#: ../src/backend/filters/clusterAnalysis.cpp:1043 +msgid "Min Size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:713 -msgid "If true, use fixed size voxels, otherwise use fixed count" +#: ../src/backend/filters/clusterAnalysis.cpp:1046 +msgid "Remove clusters below this size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:719 -msgid "Bin width x" +#: ../src/backend/filters/clusterAnalysis.cpp:1051 +msgid "Max Size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:723 -msgid "Voxel size in X direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1054 +msgid "Remove clusters above this size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:727 -msgid "Bin width y" +#: ../src/backend/filters/clusterAnalysis.cpp:1063 +msgid "Show number of clusters as a function of cluster size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:730 -msgid "Voxel size in Y direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1069 +msgid "Log Scale" msgstr "" -#: ../src/backend/filters/voxelise.cpp:736 -msgid "Bin width z" +#: ../src/backend/filters/clusterAnalysis.cpp:1072 +msgid "Use logarithmic scale for size distribution" msgstr "" -#: ../src/backend/filters/voxelise.cpp:739 -msgid "Voxel size in Z direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1079 +msgid "Morphology Dist." msgstr "" -#: ../src/backend/filters/voxelise.cpp:746 -msgid "Num bins x" +#: ../src/backend/filters/clusterAnalysis.cpp:1082 +msgid "Create a plot showing cluster aspect ratio" msgstr "" -#: ../src/backend/filters/voxelise.cpp:750 -msgid "Number of voxels to use in X direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1088 +msgid "Cluster Id" msgstr "" -#: ../src/backend/filters/voxelise.cpp:755 -msgid "Num bins y" +#: ../src/backend/filters/clusterAnalysis.cpp:1091 +msgid "Assign cluster output a unique per-cluster value (id)." msgstr "" -#: ../src/backend/filters/voxelise.cpp:758 -msgid "Number of voxels to use in Y direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1098 +msgid "Chemistry Dist." msgstr "" -#: ../src/backend/filters/voxelise.cpp:764 -msgid "Num bins z" +#: ../src/backend/filters/clusterAnalysis.cpp:1101 +msgid "Create a plot showing chemistry for each cluster size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:766 -msgid "Number of voxels to use in Z direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1108 +#: ../src/backend/filters/spatialAnalysis.cpp:1006 +#: ../src/backend/filters/profile.cpp:1111 +#: ../src/backend/filters/ionInfo.cpp:465 +msgid "Normalise" msgstr "" -#: ../src/backend/filters/voxelise.cpp:796 -msgid "Normalise by" +#: ../src/backend/filters/clusterAnalysis.cpp:1111 +msgid "Convert cluster counts to composition" msgstr "" -#: ../src/backend/filters/voxelise.cpp:799 -msgid "Method to use to normalise scalar value in each voxel" +#: ../src/backend/filters/clusterAnalysis.cpp:1117 +msgid "Postprocess" msgstr "" -#: ../src/backend/filters/voxelise.cpp:802 -msgid "Computation" +#: ../src/backend/filters/clusterAnalysis.cpp:1136 +msgid "If selected, use as \"core\" ion type (can make clusters)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:809 -#: ../src/backend/filters/spatialAnalysis.cpp:1233 -#: ../src/backend/filters/spatialAnalysis.cpp:1254 -msgid "Numerator" +#: ../src/backend/filters/clusterAnalysis.cpp:1141 +msgid "Core Ranges" msgstr "" -#: ../src/backend/filters/voxelise.cpp:812 -msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" +#: ../src/backend/filters/clusterAnalysis.cpp:1147 +msgid "Enable/Disable All" msgstr "" -#: ../src/backend/filters/voxelise.cpp:829 -msgid "Enable this ion for numerator" +#: ../src/backend/filters/clusterAnalysis.cpp:1151 +msgid "Enable/disable all ions" msgstr "" -#: ../src/backend/filters/voxelise.cpp:841 -#: ../src/backend/filters/voxelise.cpp:862 -#: ../src/backend/filters/spatialAnalysis.cpp:1261 -#: ../src/backend/filters/spatialAnalysis.cpp:1280 -msgid "Denominator" +#: ../src/backend/filters/clusterAnalysis.cpp:1164 +msgid "" +"If selected, use as \"bulk\" ion type (can be included in existing clusters)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:844 -msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" +#: ../src/backend/filters/clusterAnalysis.cpp:1169 +msgid "Bulk Ranges" msgstr "" -#: ../src/backend/filters/voxelise.cpp:858 -msgid "Enable this ion for denominator contribution" +#: ../src/backend/filters/clusterAnalysis.cpp:1185 +msgid "Max. Sep + Erode" msgstr "" -#: ../src/backend/filters/voxelise.cpp:880 -#: ../src/backend/filters/voxelise.cpp:911 -msgid "Filtering" +#: ../src/backend/filters/clusterAnalysis.cpp:1938 +msgid " --------------------------- Parameter selection notice ------------- " msgstr "" -#: ../src/backend/filters/voxelise.cpp:884 -msgid "Smoothing method to use on voxels" +#: ../src/backend/filters/clusterAnalysis.cpp:1939 +msgid "You have specified a bulk distance larger than half your link distance." msgstr "" -#: ../src/backend/filters/voxelise.cpp:887 -msgid "Processing" +#: ../src/backend/filters/clusterAnalysis.cpp:1940 +msgid "" +"You can do this; thats OK, but the output is no longer independent of the " +"computational process;" msgstr "" -#: ../src/backend/filters/voxelise.cpp:893 -msgid "Standard Dev" +#: ../src/backend/filters/clusterAnalysis.cpp:1941 +msgid "" +"This will be a problem in the case where two or more clusters can equally " +"lay claim to a \"bulk\" ion. " msgstr "" -#: ../src/backend/filters/voxelise.cpp:897 -msgid "Filtering Scale" +#: ../src/backend/filters/clusterAnalysis.cpp:1942 +msgid "" +" If your inter-cluster distance is sufficiently large (larger than your bulk " +"linking distance), then you can get away with this." msgstr "" -#: ../src/backend/filters/voxelise.cpp:903 -msgid "Kernel Size" +#: ../src/backend/filters/clusterAnalysis.cpp:1943 +msgid "" +" In theory it is possible to \"join\" the clusters, but this has not been " +"implemented for speed reasons." msgstr "" -#: ../src/backend/filters/voxelise.cpp:907 +#: ../src/backend/filters/clusterAnalysis.cpp:1944 msgid "" -"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" +"If you want this, please contact the author, or just use the source to add " +"this in yourself." msgstr "" -#: ../src/backend/filters/voxelise.cpp:927 -msgid "Representation" +#: ../src/backend/filters/clusterAnalysis.cpp:1945 +msgid "---------------------------------------------------------------------- " msgstr "" -#: ../src/backend/filters/voxelise.cpp:930 -msgid "3D display method" +#: ../src/backend/filters/clusterAnalysis.cpp:1955 +#: ../src/backend/filters/spatialAnalysis.cpp:476 +#: ../src/backend/filters/spatialAnalysis.cpp:2166 +#: ../src/backend/filters/spatialAnalysis.cpp:2595 +#: ../src/backend/filters/spatialAnalysis.cpp:2887 +#: ../src/backend/filters/spatialAnalysis.cpp:3188 +#: ../src/backend/filters/spatialAnalysis.cpp:3334 +#: ../src/backend/filters/spatialAnalysis.cpp:3597 +#: ../src/backend/filters/spatialAnalysis.cpp:3810 +#: ../src/backend/filters/transform.cpp:1015 +msgid "Collate" msgstr "" -#: ../src/backend/filters/voxelise.cpp:941 -msgid "Spot size" +#: ../src/backend/filters/clusterAnalysis.cpp:1974 +msgid "Build Core" msgstr "" -#: ../src/backend/filters/voxelise.cpp:944 -msgid "Size of the spots to use for display" +#: ../src/backend/filters/clusterAnalysis.cpp:2002 +msgid "Core" msgstr "" -#: ../src/backend/filters/voxelise.cpp:949 -#: ../src/backend/filters/voxelise.cpp:984 -#: ../src/backend/filters/voxelise.cpp:1056 -msgid "Transparency" +#: ../src/backend/filters/clusterAnalysis.cpp:2125 +msgid "Bulk" msgstr "" -#: ../src/backend/filters/voxelise.cpp:952 -msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" +#: ../src/backend/filters/clusterAnalysis.cpp:2203 +msgid "Erode" msgstr "" -#: ../src/backend/filters/voxelise.cpp:961 -msgid "Surf. param." +#: ../src/backend/filters/clusterAnalysis.cpp:2281 +msgid "Re-Collate" msgstr "" -#: ../src/backend/filters/voxelise.cpp:964 -msgid "Isovalue" +#: ../src/backend/filters/clusterAnalysis.cpp:2336 +msgid "Classify Core" msgstr "" -#: ../src/backend/filters/voxelise.cpp:967 -msgid "Scalar value to show as isosurface" +#: ../src/backend/filters/clusterAnalysis.cpp:2427 +msgid "Build Bulk" msgstr "" -#: ../src/backend/filters/voxelise.cpp:972 -#: ../src/backend/filters/voxelise.cpp:1037 -#: ../src/backend/filters/spatialAnalysis.cpp:2344 -#: ../src/backend/filters/spatialAnalysis.cpp:2397 -msgid "Surface" +#: ../src/backend/filters/clusterAnalysis.cpp:2675 +#: ../src/backend/filters/clusterAnalysis.cpp:2878 +msgid "Cluster Size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:979 -msgid "Colour of isosurface" +#: ../src/backend/filters/clusterAnalysis.cpp:2676 +#: ../src/backend/filters/clusterAnalysis.cpp:2882 +msgid "Frequency" msgstr "" -#: ../src/backend/filters/voxelise.cpp:987 -#: ../src/backend/filters/voxelise.cpp:1059 -msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" +#: ../src/backend/filters/clusterAnalysis.cpp:2880 +msgid "Composition" msgstr "" -#: ../src/backend/filters/voxelise.cpp:998 -msgid "Slice param." +#: ../src/backend/filters/voxelise.cpp:116 +msgid "None (Raw count)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1006 -msgid "Slice Axis" +#: ../src/backend/filters/voxelise.cpp:117 +msgid "Volume (Density)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1009 -msgid "Normal for the planar slice" +#: ../src/backend/filters/voxelise.cpp:118 +msgid "All Ions (conc)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1016 -msgid "Slice Coord" +#: ../src/backend/filters/voxelise.cpp:119 +msgid "Ratio (Num/Denom)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1019 -msgid "Fractional coordinate that slice plane passes through" +#: ../src/backend/filters/voxelise.cpp:123 +msgid "Point Cloud" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1024 -msgid "Interp. Mode" +#: ../src/backend/filters/voxelise.cpp:124 +msgid "Isosurface" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1032 -msgid "Interpolation mode for direction normal to slice" +#: ../src/backend/filters/voxelise.cpp:125 +msgid "Axial slice" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1048 -msgid "Colour mode" +#: ../src/backend/filters/voxelise.cpp:126 +msgid "Slice" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1051 -#: ../src/backend/filters/ionColour.cpp:261 -msgid "Colour scheme used to assign points colours by value" +#: ../src/backend/filters/voxelise.cpp:131 +msgid "Gaussian (blur)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1064 -#: ../src/backend/filters/ionColour.cpp:273 -msgid "Show Bar" +#: ../src/backend/filters/voxelise.cpp:132 +msgid "Lapl. of Gauss. (edges)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1071 -msgid "Auto Bounds" +#: ../src/backend/filters/voxelise.cpp:137 +msgid "Linear" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1072 -msgid "Auto-compute min/max values in map" +#: ../src/backend/filters/voxelise.cpp:404 +msgid "Counting" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1082 -#: ../src/backend/filters/ionColour.cpp:294 -msgid "Map start" +#: ../src/backend/filters/voxelise.cpp:579 +msgid "Gauss Smooth" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1083 -#: ../src/backend/filters/ionColour.cpp:295 -msgid "Assign points with this value to the first colour in map" +#: ../src/backend/filters/voxelise.cpp:585 +msgid "Calc. Laplace" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1090 -#: ../src/backend/filters/ionColour.cpp:302 -msgid "Map end" +#: ../src/backend/filters/voxelise.cpp:609 +msgid "Voxel Limits (min,max): (" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1091 -#: ../src/backend/filters/ionColour.cpp:303 -msgid "Assign points with this value to the last colour in map" +#: ../src/backend/filters/voxelise.cpp:619 +#: ../src/backend/filters/voxelise.cpp:1139 +msgid "Representation" msgstr "" -#: ../src/backend/filters/transform.cpp:84 -msgid "Translate" +#: ../src/backend/filters/voxelise.cpp:924 +msgid "Fixed width" msgstr "" -#: ../src/backend/filters/transform.cpp:85 -msgid "Scale (isotropic)" +#: ../src/backend/filters/voxelise.cpp:928 +msgid "If true, use fixed size voxels, otherwise use fixed count" msgstr "" -#: ../src/backend/filters/transform.cpp:86 -msgid "Scale (anisotropic)" +#: ../src/backend/filters/voxelise.cpp:934 +msgid "Bin width x" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:938 +msgid "Voxel size in X direction" msgstr "" -#: ../src/backend/filters/transform.cpp:87 -msgid "Rotate" +#: ../src/backend/filters/voxelise.cpp:942 +msgid "Bin width y" msgstr "" -#: ../src/backend/filters/transform.cpp:88 -msgid "Value Shuffle" +#: ../src/backend/filters/voxelise.cpp:945 +msgid "Voxel size in Y direction" msgstr "" -#: ../src/backend/filters/transform.cpp:89 -msgid "Spatial Noise" +#: ../src/backend/filters/voxelise.cpp:951 +msgid "Bin width z" msgstr "" -#: ../src/backend/filters/transform.cpp:90 -msgid "Translate Value" +#: ../src/backend/filters/voxelise.cpp:954 +msgid "Voxel size in Z direction" msgstr "" -#: ../src/backend/filters/transform.cpp:91 -msgid "Crop Value" +#: ../src/backend/filters/voxelise.cpp:961 +msgid "Num bins x" msgstr "" -#: ../src/backend/filters/transform.cpp:95 -msgid "Specify" +#: ../src/backend/filters/voxelise.cpp:965 +msgid "Number of voxels to use in X direction" msgstr "" -#: ../src/backend/filters/transform.cpp:96 -msgid "Boundbox Centre" +#: ../src/backend/filters/voxelise.cpp:970 +msgid "Num bins y" msgstr "" -#: ../src/backend/filters/transform.cpp:97 -msgid "Mass Centre" +#: ../src/backend/filters/voxelise.cpp:973 +msgid "Number of voxels to use in Y direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1008 -#: ../src/backend/filters/clusterAnalysis.cpp:1956 -#: ../src/backend/filters/spatialAnalysis.cpp:635 -#: ../src/backend/filters/spatialAnalysis.cpp:2298 -#: ../src/backend/filters/spatialAnalysis.cpp:2727 -#: ../src/backend/filters/spatialAnalysis.cpp:3016 -#: ../src/backend/filters/spatialAnalysis.cpp:3689 -#: ../src/backend/filters/spatialAnalysis.cpp:3952 -#: ../src/backend/filters/spatialAnalysis.cpp:4165 -msgid "Collate" +#: ../src/backend/filters/voxelise.cpp:979 +msgid "Num bins z" msgstr "" -#: ../src/backend/filters/transform.cpp:1027 -msgid "Mass-to-Charge (Da/e)" +#: ../src/backend/filters/voxelise.cpp:981 +msgid "Number of voxels to use in Z direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1081 -msgid "Shuffle" +#: ../src/backend/filters/voxelise.cpp:1011 +msgid "Normalise by" msgstr "" -#: ../src/backend/filters/transform.cpp:1105 -msgid "Splice" +#: ../src/backend/filters/voxelise.cpp:1014 +msgid "Method to use to normalise scalar value in each voxel" msgstr "" -#: ../src/backend/filters/transform.cpp:1153 -msgid "Algorithm to use to transform point data" +#: ../src/backend/filters/voxelise.cpp:1017 +msgid "Computation" msgstr "" -#: ../src/backend/filters/transform.cpp:1157 -#: ../src/backend/filters/ionInfo.cpp:546 -#: ../src/backend/filters/clusterAnalysis.cpp:943 -#: ../src/backend/filters/clusterAnalysis.cpp:951 -#: ../src/backend/filters/spatialAnalysis.cpp:800 -#: ../src/backend/filters/spatialAnalysis.cpp:808 -msgid "Algorithm" +#: ../src/backend/filters/voxelise.cpp:1024 +#: ../src/backend/filters/spatialAnalysis.cpp:1122 +#: ../src/backend/filters/spatialAnalysis.cpp:1143 +msgid "Numerator" msgstr "" -#: ../src/backend/filters/transform.cpp:1170 -msgid "Origin mode" +#: ../src/backend/filters/voxelise.cpp:1027 +msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" msgstr "" -#: ../src/backend/filters/transform.cpp:1173 -msgid "Select how transform origin is computed" +#: ../src/backend/filters/voxelise.cpp:1044 +msgid "Enable this ion for numerator" msgstr "" -#: ../src/backend/filters/transform.cpp:1178 -msgid "Show marker" +#: ../src/backend/filters/voxelise.cpp:1056 +#: ../src/backend/filters/voxelise.cpp:1077 +#: ../src/backend/filters/spatialAnalysis.cpp:1150 +#: ../src/backend/filters/spatialAnalysis.cpp:1169 +msgid "Denominator" msgstr "" -#: ../src/backend/filters/transform.cpp:1182 -msgid "Display an interactive object to set transform origin" +#: ../src/backend/filters/voxelise.cpp:1059 +msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" msgstr "" -#: ../src/backend/filters/transform.cpp:1184 -msgid "Display a small marker to denote transform origin" +#: ../src/backend/filters/voxelise.cpp:1073 +msgid "Enable this ion for denominator contribution" msgstr "" -#: ../src/backend/filters/transform.cpp:1200 -msgid "Translation" +#: ../src/backend/filters/voxelise.cpp:1095 +#: ../src/backend/filters/voxelise.cpp:1126 +msgid "Filtering" msgstr "" -#: ../src/backend/filters/transform.cpp:1203 -msgid "Translation vector for transform" +#: ../src/backend/filters/voxelise.cpp:1099 +msgid "Smoothing method to use on voxels" msgstr "" -#: ../src/backend/filters/transform.cpp:1215 -msgid "Offset" +#: ../src/backend/filters/voxelise.cpp:1102 +msgid "Processing" msgstr "" -#: ../src/backend/filters/transform.cpp:1219 -msgid "Scalar to use to offset each point's associated value" +#: ../src/backend/filters/voxelise.cpp:1108 +msgid "Standard Dev" msgstr "" -#: ../src/backend/filters/transform.cpp:1236 -#: ../src/backend/filters/transform.cpp:1263 -msgid "Origin of scale trasnform" +#: ../src/backend/filters/voxelise.cpp:1112 +msgid "Filtering Scale" msgstr "" -#: ../src/backend/filters/transform.cpp:1243 -#: ../src/backend/filters/transform.cpp:1270 -msgid "Scale Fact." +#: ../src/backend/filters/voxelise.cpp:1118 +msgid "Kernel Size" msgstr "" -#: ../src/backend/filters/transform.cpp:1246 -#: ../src/backend/filters/transform.cpp:1273 -msgid "Enlargement factor for scaling around origin" +#: ../src/backend/filters/voxelise.cpp:1122 +msgid "" +"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" msgstr "" -#: ../src/backend/filters/transform.cpp:1289 -msgid "Origin of rotation" +#: ../src/backend/filters/voxelise.cpp:1142 +msgid "3D display method" msgstr "" -#: ../src/backend/filters/transform.cpp:1297 -msgid "Axis around which to revolve" +#: ../src/backend/filters/voxelise.cpp:1153 +msgid "Spot size" msgstr "" -#: ../src/backend/filters/transform.cpp:1302 -msgid "Angle (deg)" +#: ../src/backend/filters/voxelise.cpp:1156 +msgid "Size of the spots to use for display" msgstr "" -#: ../src/backend/filters/transform.cpp:1305 -msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" +#: ../src/backend/filters/voxelise.cpp:1161 +#: ../src/backend/filters/voxelise.cpp:1196 +#: ../src/backend/filters/voxelise.cpp:1268 +#: ../src/backend/filters/voxelise.cpp:1358 +msgid "Transparency" msgstr "" -#: ../src/backend/filters/transform.cpp:1322 -msgid "Noise Type" +#: ../src/backend/filters/voxelise.cpp:1164 +msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" msgstr "" -#: ../src/backend/filters/transform.cpp:1325 -msgid "Method to use to degrade point data" +#: ../src/backend/filters/voxelise.cpp:1173 +msgid "Surf. param." msgstr "" -#: ../src/backend/filters/transform.cpp:1332 -msgid "Noise level" +#: ../src/backend/filters/voxelise.cpp:1176 +msgid "Isovalue" msgstr "" -#: ../src/backend/filters/transform.cpp:1334 -msgid "Standard dev." +#: ../src/backend/filters/voxelise.cpp:1179 +msgid "Scalar value to show as isosurface" msgstr "" -#: ../src/backend/filters/transform.cpp:1342 -msgid "Amplitude of noise" +#: ../src/backend/filters/voxelise.cpp:1184 +#: ../src/backend/filters/voxelise.cpp:1249 +#: ../src/backend/filters/voxelise.cpp:1338 +#: ../src/backend/filters/spatialAnalysis.cpp:2212 +#: ../src/backend/filters/spatialAnalysis.cpp:2265 +msgid "Surface" msgstr "" -#: ../src/backend/filters/transform.cpp:1356 -msgid "Min Value" +#: ../src/backend/filters/voxelise.cpp:1191 +msgid "Colour of isosurface" msgstr "" -#: ../src/backend/filters/transform.cpp:1360 -msgid "Minimum value to use for crop" +#: ../src/backend/filters/voxelise.cpp:1199 +#: ../src/backend/filters/voxelise.cpp:1271 +#: ../src/backend/filters/voxelise.cpp:1361 +msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" msgstr "" -#: ../src/backend/filters/transform.cpp:1364 -msgid "Max Value" +#: ../src/backend/filters/voxelise.cpp:1210 +#: ../src/backend/filters/voxelise.cpp:1317 +msgid "Slice param." msgstr "" -#: ../src/backend/filters/transform.cpp:1368 -msgid "Maximum value to use for crop" +#: ../src/backend/filters/voxelise.cpp:1218 +msgid "Slice Axis" msgstr "" -#: ../src/backend/filters/transform.cpp:1377 -msgid "Transform Params" +#: ../src/backend/filters/voxelise.cpp:1221 +msgid "Normal for the planar slice" msgstr "" -#: ../src/backend/filters/transform.cpp:1738 -msgid "White" +#: ../src/backend/filters/voxelise.cpp:1228 +msgid "Slice Coord" msgstr "" -#: ../src/backend/filters/transform.cpp:1740 -msgid "Gaussian" +#: ../src/backend/filters/voxelise.cpp:1231 +msgid "Fractional coordinate that slice plane passes through" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:259 -msgid "Collate Input" +#: ../src/backend/filters/voxelise.cpp:1236 +msgid "Interp. Mode" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:348 -msgid "Execute" +#: ../src/backend/filters/voxelise.cpp:1244 +msgid "Interpolation mode for direction normal to slice" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:389 -msgid "Collate output" +#: ../src/backend/filters/voxelise.cpp:1260 +#: ../src/backend/filters/voxelise.cpp:1350 +msgid "Colour mode" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:564 -#: ../src/backend/filters/externalProgram.cpp:578 -msgid "Command" +#: ../src/backend/filters/voxelise.cpp:1263 +#: ../src/backend/filters/voxelise.cpp:1353 +#: ../src/backend/filters/ionColour.cpp:293 +msgid "Colour scheme used to assign points colours by value" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:567 -msgid "" -"Full command to send to operating system. See manual for escape sequence " -"meanings" +#: ../src/backend/filters/voxelise.cpp:1276 +#: ../src/backend/filters/voxelise.cpp:1366 +#: ../src/backend/filters/ionColour.cpp:305 +msgid "Show Bar" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:571 -msgid "Work Dir" +#: ../src/backend/filters/voxelise.cpp:1279 +msgid "Display colour bar in 3D view?" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:574 -msgid "Directory to run the command in" +#: ../src/backend/filters/voxelise.cpp:1284 +#: ../src/backend/filters/voxelise.cpp:1373 +msgid "Auto Bounds" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:581 -msgid "Cleanup input" +#: ../src/backend/filters/voxelise.cpp:1285 +#: ../src/backend/filters/voxelise.cpp:1374 +msgid "Auto-compute min/max values in map" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:584 -msgid "Erase input files when command completed" +#: ../src/backend/filters/voxelise.cpp:1295 +#: ../src/backend/filters/voxelise.cpp:1384 +#: ../src/backend/filters/ionColour.cpp:337 +msgid "Map start" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:589 -msgid "Cache" +#: ../src/backend/filters/voxelise.cpp:1296 +#: ../src/backend/filters/voxelise.cpp:1385 +#: ../src/backend/filters/ionColour.cpp:338 +msgid "Assign points with this value to the first colour in map" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:592 -msgid "" -"Assume program does not alter its output, unless inputs from 3Depict are " -"altered" +#: ../src/backend/filters/voxelise.cpp:1303 +#: ../src/backend/filters/voxelise.cpp:1392 +#: ../src/backend/filters/ionColour.cpp:345 +msgid "Map end" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:26 -msgid "Flat TOF" +#: ../src/backend/filters/voxelise.cpp:1304 +#: ../src/backend/filters/voxelise.cpp:1393 +#: ../src/backend/filters/ionColour.cpp:346 +msgid "Assign points with this value to the last colour in map" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:33 -msgid "INsufficient bins to perform fit" +#: ../src/backend/filters/voxelise.cpp:1320 +msgid "Slice Offset" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:34 -msgid "Insufficient counts to perform fit" +#: ../src/backend/filters/voxelise.cpp:1323 +msgid "Point on plane for slice, in 0->1 coordinates" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:35 -msgid "Insufficient data to perform fit" +#: ../src/backend/filters/voxelise.cpp:1330 +msgid "Slice Normal" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:36 -msgid "Data did not appear to be random noise - cannot fit noise level" +#: ../src/backend/filters/voxelise.cpp:1333 +msgid "Normal vector for slice" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:37 -msgid "Rectilinear" +#: ../src/backend/filters/ionColour.cpp:289 +msgid "Colour Map" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:38 -msgid "Convex hull" +#: ../src/backend/filters/ionColour.cpp:297 +msgid "Reverse map" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:200 -msgid "No ions" +#: ../src/backend/filters/ionColour.cpp:298 +msgid "Reverse the colour scale" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:226 -#: ../src/backend/filters/spectrumPlot.cpp:432 -msgid "" -"Background fit failed - input data was considered ill formed (gauss-test)" +#: ../src/backend/filters/ionColour.cpp:306 +msgid "Display the colour legend in the 3D view" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:227 -msgid "Following data has not been corrected" +#: ../src/backend/filters/ionColour.cpp:312 +msgid "Opacity" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:279 -msgid "--Counts--" +#: ../src/backend/filters/ionColour.cpp:313 +msgid "How see-through to make the legend (0- transparent, 1- solid)" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:289 -msgid "Total Ranged\t" +#: ../src/backend/filters/ionColour.cpp:320 +msgid "Num Colours" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:294 -msgid "Total (incl. unranged)\t" +#: ../src/backend/filters/ionColour.cpp:322 +msgid "Number of unique colours to use in colour map" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:307 -msgid "n/a" +#: ../src/backend/filters/ionColour.cpp:327 +msgid "Auto bounds" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:317 -#: ../src/backend/filters/ionDownsample.cpp:496 -msgid "Unranged" +#: ../src/backend/filters/ionColour.cpp:329 +msgid "Automatically scale colour to min/max of data range" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:330 -msgid "Number of points : " +#: ../src/backend/filters/ionColour.cpp:460 ../src/backend/filter.cpp:197 +msgid "Aborted" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:359 -msgid "Rectilinear Bounds : " +#: ../src/backend/filters/spatialAnalysis.cpp:123 +msgid "Local Density" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:364 -msgid "Volume (len^3): " +#: ../src/backend/filters/spatialAnalysis.cpp:124 +msgid "Density Filtering" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:381 -msgid "Convex Volume (len^3): " +#: ../src/backend/filters/spatialAnalysis.cpp:125 +msgid "Radial Distribution" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:384 -msgid "Unable to compute volume" +#: ../src/backend/filters/spatialAnalysis.cpp:126 +msgid "Axial Distribution" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:413 -msgid "Ranged Density (pts/vol):" +#: ../src/backend/filters/spatialAnalysis.cpp:127 +msgid "Binomial Distribution" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:418 -msgid "Total Density (pts/vol):" +#: ../src/backend/filters/spatialAnalysis.cpp:128 +msgid "Point Em/Replacement" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:445 -msgid "Compositions" +#: ../src/backend/filters/spatialAnalysis.cpp:129 +msgid "Local Chemistry" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:446 -msgid "Display compositional data for points in console" +#: ../src/backend/filters/spatialAnalysis.cpp:133 +msgid "Neighbour Count" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:450 -msgid "Counts" +#: ../src/backend/filters/spatialAnalysis.cpp:484 +msgid "Load" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:451 -msgid "Display count data for points in console" +#: ../src/backend/filters/spatialAnalysis.cpp:539 +#: ../src/backend/filters/spatialAnalysis.cpp:2198 +#: ../src/backend/filters/spatialAnalysis.cpp:2251 +#: ../src/backend/filters/spatialAnalysis.cpp:2601 +#: ../src/backend/filters/spatialAnalysis.cpp:2893 +#: ../src/backend/filters/spatialAnalysis.cpp:3200 +#: ../src/backend/filters/spatialAnalysis.cpp:3829 +msgid "Build" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:458 -msgid "Ion data" +#: ../src/backend/filters/spatialAnalysis.cpp:588 +#: ../src/backend/filters/spatialAnalysis.cpp:3222 +#: ../src/backend/filters/spatialAnalysis.cpp:3718 +#: ../src/backend/filters/spatialAnalysis.cpp:3846 +msgid "Compute" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:462 -#: ../src/backend/filters/profile.cpp:1107 -#: ../src/backend/filters/clusterAnalysis.cpp:1108 -#: ../src/backend/filters/spatialAnalysis.cpp:1116 -msgid "Normalise" +#: ../src/backend/filters/spatialAnalysis.cpp:710 +msgid "Spatial analysis algorithm to use" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:466 -msgid "Normalise count data" +#: ../src/backend/filters/spatialAnalysis.cpp:734 +#: ../src/backend/filters/spatialAnalysis.cpp:785 +msgid "Stop Mode" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:530 -msgid "Volume" +#: ../src/backend/filters/spatialAnalysis.cpp:737 +msgid "Method to use to terminate algorithm when examining each point" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:533 -msgid "Compute volume for point data" +#: ../src/backend/filters/spatialAnalysis.cpp:744 +msgid "NN Max" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:549 -msgid "Select volume counting technique" +#: ../src/backend/filters/spatialAnalysis.cpp:747 +msgid "Maximum number of neighbours to examine" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:562 -msgid "Volume data" +#: ../src/backend/filters/spatialAnalysis.cpp:754 +msgid "Normalise bins" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:120 -#: ../src/backend/filters/rangeFile.h:96 -msgid "Ranging" +#: ../src/backend/filters/spatialAnalysis.cpp:757 +msgid "" +"Normalise counts by binwidth. Needed when comparing NN histograms against " +"one another" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:560 -#: ../src/backend/filters/rangeFile.cpp:580 -#: ../src/backend/filters/dataLoad.cpp:484 -#: ../src/backend/filters/dataLoad.cpp:505 -msgid "File" +#: ../src/backend/filters/spatialAnalysis.cpp:763 +msgid "Show Random" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:563 -msgid "File to use for range data" +#: ../src/backend/filters/spatialAnalysis.cpp:766 +msgid "Show a fitted (density matched) theoretical distribution" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:573 -msgid "Drop unranged" +#: ../src/backend/filters/spatialAnalysis.cpp:777 +msgid "Dist Max" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:575 -msgid "Remove unranged points when generating output" +#: ../src/backend/filters/spatialAnalysis.cpp:780 +msgid "Maximum distance from each point for search" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:585 -msgid "Legend" +#: ../src/backend/filters/spatialAnalysis.cpp:794 +#: ../src/backend/filters/spatialAnalysis.cpp:928 +#: ../src/backend/filters/profile.cpp:1089 +msgid "Num Bins" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:587 -msgid "Display colour legend for enabled ions" +#: ../src/backend/filters/spatialAnalysis.cpp:797 +#: ../src/backend/filters/spatialAnalysis.cpp:931 +msgid "Number of bins for output 1D RDF plot" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:591 -msgid "View" +#: ../src/backend/filters/spatialAnalysis.cpp:803 +msgid "Surface Remove" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:607 -msgid "All Ions" +#: ../src/backend/filters/spatialAnalysis.cpp:806 +msgid "" +"Exclude surface as part of source to minimise bias in RDF (at cost of " +"increased noise)" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:608 -msgid "Enable/disable all ions at once" +#: ../src/backend/filters/spatialAnalysis.cpp:813 +msgid "Remove Dist" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:616 -msgid "Species" +#: ../src/backend/filters/spatialAnalysis.cpp:816 +msgid "Minimum distance to remove from surface" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:623 -msgid "IonID " +#: ../src/backend/filters/spatialAnalysis.cpp:824 +#: ../src/backend/filters/spatialAnalysis.cpp:936 +msgid "Plot colour " msgstr "" -#: ../src/backend/filters/rangeFile.cpp:624 -msgid "Enable/disable specified ion" +#: ../src/backend/filters/spatialAnalysis.cpp:827 +#: ../src/backend/filters/spatialAnalysis.cpp:939 +msgid "Colour of output plot" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:634 -msgid "Active Ion " +#: ../src/backend/filters/spatialAnalysis.cpp:831 +#: ../src/backend/filters/spatialAnalysis.cpp:917 +#: ../src/backend/filters/spatialAnalysis.cpp:922 +#: ../src/backend/filters/spatialAnalysis.cpp:954 +#: ../src/backend/filters/spatialAnalysis.cpp:993 +msgid "Alg. Params." msgstr "" -#: ../src/backend/filters/rangeFile.cpp:636 -msgid "If true, ion is used in output" +#: ../src/backend/filters/spatialAnalysis.cpp:844 +#: ../src/backend/filters/spatialAnalysis.cpp:1096 +msgid "Source" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:646 -msgid "Colour " +#: ../src/backend/filters/spatialAnalysis.cpp:847 +msgid "Ions to use for initiating RDF search" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:650 -msgid "Colour used to represent ion" +#: ../src/backend/filters/spatialAnalysis.cpp:860 +#: ../src/backend/filters/spatialAnalysis.cpp:1112 +#: ../src/backend/filters/spatialAnalysis.cpp:1138 +msgid "Enable/disable ion as source" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:673 -msgid "All Ranges" +#: ../src/backend/filters/spatialAnalysis.cpp:865 +#: ../src/backend/filters/spatialAnalysis.cpp:1117 +msgid "Source Ion" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:674 -msgid "Enable/disable all ranges" +#: ../src/backend/filters/spatialAnalysis.cpp:875 +#: ../src/backend/filters/spatialAnalysis.cpp:1153 +msgid "Enable/disable all ions as target" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:689 -msgid "Active Rng " +#: ../src/backend/filters/spatialAnalysis.cpp:887 +#: ../src/backend/filters/spatialAnalysis.cpp:1165 +msgid "Enable/disable this ion as target" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:692 -msgid "" -"Enable/disable specified range (ion must also be enabled to activiate range)" +#: ../src/backend/filters/spatialAnalysis.cpp:891 +msgid "Target Ion" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:696 -msgid "Ion " +#: ../src/backend/filters/spatialAnalysis.cpp:901 +msgid "Cutoff" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:699 -msgid "Name of ion associate to this range" +#: ../src/backend/filters/spatialAnalysis.cpp:904 +msgid "Remove points with local density above/below this value" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:708 -msgid "Start rng " +#: ../src/backend/filters/spatialAnalysis.cpp:910 +msgid "Retain Upper" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:711 -msgid "Start value for range" +#: ../src/backend/filters/spatialAnalysis.cpp:913 +msgid "Retain either points with density above (enabled) or below cutoff" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:716 -msgid "End rng " +#: ../src/backend/filters/spatialAnalysis.cpp:950 +msgid "Vector along which to calculate distribution function" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:719 -msgid "Stopping value for range`" +#: ../src/backend/filters/spatialAnalysis.cpp:961 +msgid "Block size" msgstr "" -#: ../src/backend/filters/profile.cpp:51 -msgid "Cylinder (axial)" +#: ../src/backend/filters/spatialAnalysis.cpp:964 +msgid "Number of ions to use per block" msgstr "" -#: ../src/backend/filters/profile.cpp:52 -msgid "Cylinder (radial)" +#: ../src/backend/filters/spatialAnalysis.cpp:971 +msgid "Max Block Aspect" msgstr "" -#: ../src/backend/filters/profile.cpp:591 -msgid "Distance" +#: ../src/backend/filters/spatialAnalysis.cpp:974 +msgid "" +"Maximum allowable block aspect ratio. Blocks above this aspect are " +"discarded. Setting too high decreases correlation strength. Too low causes " +"loss of statistical power." msgstr "" -#: ../src/backend/filters/profile.cpp:599 -msgid "Fraction" +#: ../src/backend/filters/spatialAnalysis.cpp:985 +msgid "Extrusion Direction" msgstr "" -#: ../src/backend/filters/profile.cpp:601 -msgid "Density (\\frac{\\#}{len^3})" +#: ../src/backend/filters/spatialAnalysis.cpp:988 +msgid "Direction in which blocks are extended during construction." msgstr "" -#: ../src/backend/filters/profile.cpp:628 -msgid "Freq. Profile" +#: ../src/backend/filters/spatialAnalysis.cpp:997 +msgid "Plot Counts" msgstr "" -#: ../src/backend/filters/profile.cpp:680 -msgid "No data remained in profile - cannot display result" +#: ../src/backend/filters/spatialAnalysis.cpp:1000 +msgid "Show the counts in the binomial histogram" msgstr "" -#: ../src/backend/filters/profile.cpp:967 -msgid "Total Density" +#: ../src/backend/filters/spatialAnalysis.cpp:1009 +msgid "" +"Normalise the counts in the binomial histogram to a probability density " +"function" msgstr "" -#: ../src/backend/filters/profile.cpp:971 -msgid "Do not do per-species analysis, perform density computation only" +#: ../src/backend/filters/spatialAnalysis.cpp:1013 +msgid "Expected Freq" msgstr "" -#: ../src/backend/filters/profile.cpp:985 -msgid "Primitive type" +#: ../src/backend/filters/spatialAnalysis.cpp:1016 +msgid "" +"Show the theoretically expected probability density function for a random " +"dataset with the same mean" msgstr "" -#: ../src/backend/filters/profile.cpp:989 -msgid "Basic shape to use for profile" +#: ../src/backend/filters/spatialAnalysis.cpp:1024 +msgid "Display Grid" msgstr "" -#: ../src/backend/filters/profile.cpp:1001 -msgid "Display the 3D composition profile interaction object" +#: ../src/backend/filters/spatialAnalysis.cpp:1027 +msgid "Show the extruded grid in the 3D view. This may be slow" msgstr "" -#: ../src/backend/filters/profile.cpp:1016 -#: ../src/backend/filters/spatialAnalysis.cpp:1044 -msgid "Position for centre of cylinder" +#: ../src/backend/filters/spatialAnalysis.cpp:1031 +msgid "View Options" msgstr "" -#: ../src/backend/filters/profile.cpp:1024 -msgid "Vector between ends of cylinder" +#: ../src/backend/filters/spatialAnalysis.cpp:1037 +msgid "Data File" msgstr "" -#: ../src/backend/filters/profile.cpp:1032 -msgid "Prevent length of cylinder changing during interaction" +#: ../src/backend/filters/spatialAnalysis.cpp:1041 +msgid "Pos file of points to subtract/replace/etc" msgstr "" -#: ../src/backend/filters/profile.cpp:1075 -msgid "Fixed Bin Num" +#: ../src/backend/filters/spatialAnalysis.cpp:1046 +msgid "Match Tol." msgstr "" -#: ../src/backend/filters/profile.cpp:1078 -msgid "" -"If true, use a fixed number of bins for profile, otherwise use fixed step " -"size" +#: ../src/backend/filters/spatialAnalysis.cpp:1049 +msgid "Tolerance to allow for matching" msgstr "" -#: ../src/backend/filters/profile.cpp:1085 -#: ../src/backend/filters/spatialAnalysis.cpp:887 -#: ../src/backend/filters/spatialAnalysis.cpp:1021 -msgid "Num Bins" +#: ../src/backend/filters/spatialAnalysis.cpp:1065 +msgid "Replacment condition" msgstr "" -#: ../src/backend/filters/profile.cpp:1090 -msgid "Number of bins to use for profile" +#: ../src/backend/filters/spatialAnalysis.cpp:1071 +msgid "Replace value" msgstr "" -#: ../src/backend/filters/profile.cpp:1096 -#: ../src/backend/filters/spectrumPlot.cpp:580 -msgid "Bin width" +#: ../src/backend/filters/spatialAnalysis.cpp:1074 +msgid "Use value data from file when replacing ions" msgstr "" -#: ../src/backend/filters/profile.cpp:1102 -msgid "Size of each bin in profile" +#: ../src/backend/filters/spatialAnalysis.cpp:1079 +msgid "Replacement" msgstr "" -#: ../src/backend/filters/profile.cpp:1111 -msgid "Convert bin counts into relative frequencies in each bin" +#: ../src/backend/filters/spatialAnalysis.cpp:1099 +msgid "Enable/disable all ions as source" msgstr "" -#: ../src/backend/filters/profile.cpp:1115 -msgid "Min. events" +#: ../src/backend/filters/spatialAnalysis.cpp:1125 +msgid "Ions to use as Numerator for conc. calculation" msgstr "" -#: ../src/backend/filters/profile.cpp:1119 -msgid "Drop data that does not have this many events" +#: ../src/backend/filters/spatialAnalysis.cpp:1681 +msgid "Spatial analysis aborted by user" msgstr "" -#: ../src/backend/filters/profile.cpp:1122 -msgid "Settings" +#: ../src/backend/filters/spatialAnalysis.cpp:1682 +msgid "Insufficient memory for binomial. Reduce input size?" msgstr "" -#: ../src/backend/filters/profile.cpp:1144 -#: ../src/backend/filters/spectrumPlot.cpp:669 -msgid "Plot Type" +#: ../src/backend/filters/spatialAnalysis.cpp:1683 +msgid "Required range data not present" msgstr "" -#: ../src/backend/filters/profile.cpp:1147 -msgid "Visual style for plot" +#: ../src/backend/filters/spatialAnalysis.cpp:1684 +msgid "Unable to generate usable binomial grid" msgstr "" -#: ../src/backend/filters/profile.cpp:1158 -msgid "Colour of plot" +#: ../src/backend/filters/spatialAnalysis.cpp:1686 +msgid "Insufficient points to continue" msgstr "" -#: ../src/backend/filters/profile.cpp:1174 -msgid "Err. Estimator" +#: ../src/backend/filters/spatialAnalysis.cpp:1687 +msgid "Unable to load file" msgstr "" -#: ../src/backend/filters/profile.cpp:1177 -msgid "Method of estimating error associated with each bin" +#: ../src/backend/filters/spatialAnalysis.cpp:2305 +#: ../src/backend/filters/spatialAnalysis.cpp:2624 +#: ../src/backend/filters/spatialAnalysis.cpp:2917 +msgid "Analyse" msgstr "" -#: ../src/backend/filters/profile.cpp:1184 -msgid "Avg. Window" +#: ../src/backend/filters/spatialAnalysis.cpp:2384 +#: ../src/backend/filters/spatialAnalysis.cpp:2474 +#: ../src/backend/filters/spatialAnalysis.cpp:2540 +msgid "Radial Distance" msgstr "" -#: ../src/backend/filters/profile.cpp:1187 -msgid "Number of bins to include in moving average filter" +#: ../src/backend/filters/spatialAnalysis.cpp:2386 +#: ../src/backend/filters/spatialAnalysis.cpp:2479 +msgid "Count/Distance" msgstr "" -#: ../src/backend/filters/profile.cpp:1191 -msgid "Error analysis" +#: ../src/backend/filters/spatialAnalysis.cpp:2391 +#: ../src/backend/filters/spatialAnalysis.cpp:2484 +msgid "NN Freq." msgstr "" -#: ../src/backend/filters/boundingBox.cpp:64 -msgid "Box only" +#: ../src/backend/filters/spatialAnalysis.cpp:2531 +msgid "Warning, " msgstr "" -#: ../src/backend/filters/boundingBox.cpp:65 -msgid "Tick" +#: ../src/backend/filters/spatialAnalysis.cpp:2532 +msgid "" +" points were unable to find neighbour points that exceeded the search " +"radius, and thus terminated prematurely" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:66 -msgid "Dimension" +#: ../src/backend/filters/spatialAnalysis.cpp:2542 +msgid " RDF" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:571 -msgid "If true, show box, otherwise hide box" +#: ../src/backend/filters/spatialAnalysis.cpp:2823 +#: ../src/backend/filters/spatialAnalysis.cpp:3123 +msgid "Number Density (\\#/Vol^3)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:584 -msgid "Style" +#: ../src/backend/filters/spatialAnalysis.cpp:2848 +#: ../src/backend/filters/spatialAnalysis.cpp:3145 +msgid "Warning," msgstr "" -#: ../src/backend/filters/boundingBox.cpp:587 -msgid "Box display mode" +#: ../src/backend/filters/spatialAnalysis.cpp:2849 +#: ../src/backend/filters/spatialAnalysis.cpp:3146 +msgid " points were un-analysable. These have been dropped" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:590 -msgid "Display mode" +#: ../src/backend/filters/spatialAnalysis.cpp:2871 +#: ../src/backend/filters/spatialAnalysis.cpp:3168 +msgid "And so on..." msgstr "" -#: ../src/backend/filters/boundingBox.cpp:599 -msgid "Fixed Tick Num" +#: ../src/backend/filters/spatialAnalysis.cpp:3268 +msgid "Insufficient points to complete analysis" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:603 -msgid "" -"If true, evenly use specified number of ticks. Otherwise, use distance to " -"determine tick count" +#: ../src/backend/filters/spatialAnalysis.cpp:3291 +msgid "Axial Distance" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:611 -msgid "Num X" +#: ../src/backend/filters/spatialAnalysis.cpp:3293 +msgid " 1D Dist. Func." msgstr "" -#: ../src/backend/filters/boundingBox.cpp:614 -msgid "Tick count in X direction" +#: ../src/backend/filters/spatialAnalysis.cpp:3344 +msgid "Binomial" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:619 -msgid "Num Y" +#: ../src/backend/filters/spatialAnalysis.cpp:3477 +#: ../src/backend/filters/spatialAnalysis.cpp:3542 +msgid "Ions in Block" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:622 -msgid "Tick count in Y direction" +#: ../src/backend/filters/spatialAnalysis.cpp:3479 +#: ../src/backend/filters/spatialAnalysis.cpp:3544 +#: ../src/backend/filters/spectrumPlot.cpp:79 +msgid "Probability" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:627 -msgid "Num Z" +#: ../src/backend/filters/spatialAnalysis.cpp:3546 +msgid "Count (blocks)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:630 -msgid "Tick count in Z direction" +#: ../src/backend/filters/spatialAnalysis.cpp:3611 +msgid "Build Numerator" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:636 -msgid "Spacing X" +#: ../src/backend/filters/spatialAnalysis.cpp:3625 +msgid "Build Denominator" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:640 -msgid "Distance between ticks on X axis" +#: ../src/backend/filters/spatialAnalysis.cpp:3961 +msgid "Relative Conc. (%)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:644 -msgid "Spacing Y" +#: ../src/backend/filters/profile.cpp:51 +msgid "Cylinder (axial)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:648 -msgid "Distance between ticks on Y axis" +#: ../src/backend/filters/profile.cpp:52 +msgid "Cylinder (radial)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:652 -msgid "Spacing Z" +#: ../src/backend/filters/profile.cpp:595 +msgid "Distance" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:656 -msgid "Distance between ticks on Z axis" +#: ../src/backend/filters/profile.cpp:603 +msgid "Fraction" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:664 -msgid "Ticks X" +#: ../src/backend/filters/profile.cpp:605 +msgid "Density (\\frac{\\#}{len^3})" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:668 -msgid "Display tick marks on X axis" +#: ../src/backend/filters/profile.cpp:632 +msgid "Freq. Profile" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:672 -msgid "Ticks Y" +#: ../src/backend/filters/profile.cpp:684 +msgid "No data remained in profile - cannot display result" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:676 -msgid "Display tick marks on Y axis" +#: ../src/backend/filters/profile.cpp:971 +msgid "Total Density" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:680 -msgid "Ticks Z" +#: ../src/backend/filters/profile.cpp:975 +msgid "Do not do per-species analysis, perform density computation only" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:684 -msgid "Display tick marks on Z axis" +#: ../src/backend/filters/profile.cpp:989 +msgid "Primitive type" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:687 -msgid "Tick marks" +#: ../src/backend/filters/profile.cpp:993 +msgid "Basic shape to use for profile" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:694 -msgid "Box Colour" +#: ../src/backend/filters/profile.cpp:1005 +msgid "Display the 3D composition profile interaction object" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:698 -msgid "Colour of the bounding box" +#: ../src/backend/filters/profile.cpp:1020 +msgid "Position for centre of cylinder" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:703 -msgid "Line thickness" +#: ../src/backend/filters/profile.cpp:1028 +msgid "Vector between ends of cylinder" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:707 -msgid "Thickness of the lines used to draw the box" +#: ../src/backend/filters/profile.cpp:1036 +msgid "Prevent length of cylinder changing during interaction" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:718 -msgid "Relative size for text" +#: ../src/backend/filters/profile.cpp:1079 +msgid "Fixed Bin Num" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:723 -msgid "Abs. Coords" +#: ../src/backend/filters/profile.cpp:1082 +msgid "" +"If true, use a fixed number of bins for profile, otherwise use fixed step " +"size" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:726 -msgid "Show labels using aboslute coo-ordinates" +#: ../src/backend/filters/profile.cpp:1094 +msgid "Number of bins to use for profile" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:191 -msgid "Sampling" +#: ../src/backend/filters/profile.cpp:1100 +#: ../src/backend/filters/spectrumPlot.cpp:583 +msgid "Bin width" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:447 -msgid "By Count" +#: ../src/backend/filters/profile.cpp:1106 +msgid "Size of each bin in profile" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:450 -msgid "Sample up to a fixed number of ions" +#: ../src/backend/filters/profile.cpp:1115 +msgid "Convert bin counts into relative frequencies in each bin" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:456 -msgid "Per Species" +#: ../src/backend/filters/profile.cpp:1119 +msgid "Min. events" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:460 -msgid "Use species specific (from ranging) sampling values" +#: ../src/backend/filters/profile.cpp:1123 +msgid "Drop data that does not have this many events" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:489 -msgid "Sampling value for species" +#: ../src/backend/filters/profile.cpp:1126 +msgid "Settings" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:505 -#: ../src/backend/filters/ionDownsample.cpp:529 -msgid "Sampling rates" +#: ../src/backend/filters/profile.cpp:1148 +#: ../src/backend/filters/spectrumPlot.cpp:672 +msgid "Plot Type" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:513 -msgid "Output Count" +#: ../src/backend/filters/profile.cpp:1151 +msgid "Visual style for plot" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:516 -msgid "Sample up to this value of points" +#: ../src/backend/filters/profile.cpp:1162 +msgid "Colour of plot" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:521 -msgid "Out Fraction" +#: ../src/backend/filters/profile.cpp:1178 +msgid "Err. Estimator" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:525 -msgid "Sample this fraction of points" +#: ../src/backend/filters/profile.cpp:1181 +msgid "Method of estimating error associated with each bin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:84 -#: ../src/backend/filters/clusterAnalysis.cpp:1060 -msgid "Size Distribution" +#: ../src/backend/filters/profile.cpp:1188 +msgid "Avg. Window" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:85 -msgid "Chemistry Distribution" +#: ../src/backend/filters/profile.cpp:1191 +msgid "Number of bins to include in moving average filter" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:503 -msgid "No range data. Can't cluster." +#: ../src/backend/filters/profile.cpp:1195 +msgid "Error analysis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:514 -msgid "" -"No ranges selected for cluster \"core\". Cannot continue with clustering." +#: ../src/backend/filters/transform.cpp:84 +msgid "Translate" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:523 -msgid "" -"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +#: ../src/backend/filters/transform.cpp:85 +msgid "Scale (isotropic)" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:689 -msgid "Morphology Plot" +#: ../src/backend/filters/transform.cpp:86 +msgid "Scale (anisotropic)" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:690 -msgid "\\lambda_1:\\lambda_2 ratio" +#: ../src/backend/filters/transform.cpp:87 +msgid "Rotate" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:691 -msgid "\\lambda_2:\\lambda_3 ratio" +#: ../src/backend/filters/transform.cpp:88 +msgid "Value Shuffle" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:736 -msgid "No clusters had sufficient dimensionality to compute singular values" +#: ../src/backend/filters/transform.cpp:89 +msgid "Spatial Noise" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:794 -msgid "Found :" +#: ../src/backend/filters/transform.cpp:90 +msgid "Translate Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:796 -msgid " clusters" +#: ../src/backend/filters/transform.cpp:91 +msgid "Crop Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:888 -msgid "Compositions (fractional, core+bulk)" +#: ../src/backend/filters/transform.cpp:95 +msgid "Specify" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:890 -msgid "Compositions (fractional, core only)" +#: ../src/backend/filters/transform.cpp:96 +msgid "Boundbox Centre" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:908 -msgid "Frequencies (core+bulk)" +#: ../src/backend/filters/transform.cpp:97 +msgid "Mass Centre" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:939 -msgid "Core Link + Erode" +#: ../src/backend/filters/transform.cpp:1080 +msgid "Shuffle" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:947 -msgid "Cluster algorithm mode" +#: ../src/backend/filters/transform.cpp:1104 +msgid "Splice" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:958 -msgid "Core Classify" +#: ../src/backend/filters/transform.cpp:1152 +msgid "Algorithm to use to transform point data" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:961 -msgid "" -"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" +#: ../src/backend/filters/transform.cpp:1169 +msgid "Origin mode" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:967 -msgid "Core Classify Dist" +#: ../src/backend/filters/transform.cpp:1172 +msgid "Select how transform origin is computed" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:970 -msgid "Restrict only atoms by distance to be cluster sources" +#: ../src/backend/filters/transform.cpp:1177 +msgid "Show marker" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:975 -msgid "Classify Knn Max" +#: ../src/backend/filters/transform.cpp:1181 +msgid "Display an interactive object to set transform origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:978 -msgid "" -"Require that the kth NN (this number) is within the classify distance, to be " -"a cluster source" +#: ../src/backend/filters/transform.cpp:1183 +msgid "Display a small marker to denote transform origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:984 -msgid "Core Link Dist" +#: ../src/backend/filters/transform.cpp:1199 +msgid "Translation" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:987 -msgid "Distance between clusters to allow linking" +#: ../src/backend/filters/transform.cpp:1202 +msgid "Translation vector for transform" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:992 -msgid "Bulk Link" +#: ../src/backend/filters/transform.cpp:1214 +msgid "Offset" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:995 -#: ../src/backend/filters/clusterAnalysis.cpp:1012 -msgid "Enable linking of non-cluster species - eg for composition analysis " +#: ../src/backend/filters/transform.cpp:1218 +msgid "Scalar to use to offset each point's associated value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1002 -msgid "Bulk Link (Envelope) Dist" +#: ../src/backend/filters/transform.cpp:1235 +#: ../src/backend/filters/transform.cpp:1262 +msgid "Origin of scale transform" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1005 -msgid "" -"Distance from core points that form cluster that is used to grab surrounding " -"bulk points" +#: ../src/backend/filters/transform.cpp:1242 +#: ../src/backend/filters/transform.cpp:1269 +msgid "Scale Fact." msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1009 -msgid "Erosion" +#: ../src/backend/filters/transform.cpp:1245 +#: ../src/backend/filters/transform.cpp:1272 +msgid "Enlargement factor for scaling around origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1018 -msgid "Erode Dist" +#: ../src/backend/filters/transform.cpp:1288 +msgid "Origin of rotation" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1021 -msgid "" -"Distance from unclustered material in which bulk points are eroded from " -"cluster" +#: ../src/backend/filters/transform.cpp:1296 +msgid "Axis around which to revolve" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1028 -msgid "Clustering Params" +#: ../src/backend/filters/transform.cpp:1301 +msgid "Angle (deg)" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1033 -msgid "Size Cropping" +#: ../src/backend/filters/transform.cpp:1304 +msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1036 -msgid "Remove clusters based upon size distribution" +#: ../src/backend/filters/transform.cpp:1321 +msgid "Noise Type" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1043 -msgid "Min Size" +#: ../src/backend/filters/transform.cpp:1324 +msgid "Method to use to degrade point data" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1046 -msgid "Remove clusters below this size" +#: ../src/backend/filters/transform.cpp:1331 +msgid "Noise level" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1051 -msgid "Max Size" +#: ../src/backend/filters/transform.cpp:1333 +msgid "Standard dev." msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1054 -msgid "Remove clusters above this size" +#: ../src/backend/filters/transform.cpp:1341 +msgid "Amplitude of noise" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1063 -msgid "Show number of clusters as a function of cluster size" +#: ../src/backend/filters/transform.cpp:1355 +msgid "Min Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1069 -msgid "Log Scale" +#: ../src/backend/filters/transform.cpp:1359 +msgid "Minimum value to use for crop" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1072 -msgid "Use logarithmic scale for size distribution" +#: ../src/backend/filters/transform.cpp:1363 +msgid "Max Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1079 -msgid "Morphology Dist." +#: ../src/backend/filters/transform.cpp:1367 +msgid "Maximum value to use for crop" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1082 -msgid "Create a plot showing cluster aspect ratio" +#: ../src/backend/filters/transform.cpp:1376 +msgid "Transform Params" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1088 -msgid "Cluster Id" +#: ../src/backend/filters/transform.cpp:1745 +msgid "White" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1091 -msgid "Assign cluster output a unique per-cluster value (id)." +#: ../src/backend/filters/transform.cpp:1747 +msgid "Gaussian" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1098 -msgid "Chemistry Dist." +#: ../src/backend/filters/boundingBox.cpp:64 +msgid "Box only" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1101 -msgid "Create a plot showing chemistry for each cluster size" +#: ../src/backend/filters/boundingBox.cpp:65 +msgid "Tick" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1111 -msgid "Convert cluster counts to composition" +#: ../src/backend/filters/boundingBox.cpp:66 +msgid "Dimension" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1117 -msgid "Postprocess" +#: ../src/backend/filters/boundingBox.cpp:572 +msgid "If true, show box, otherwise hide box" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1136 -msgid "If selected, use as \"core\" ion type (can make clusters)" +#: ../src/backend/filters/boundingBox.cpp:585 +msgid "Style" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1141 -msgid "Core Ranges" +#: ../src/backend/filters/boundingBox.cpp:588 +msgid "Box display mode" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1147 -msgid "Enable/Disable All" +#: ../src/backend/filters/boundingBox.cpp:591 +msgid "Display mode" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1152 -msgid "Enable/disable all ions" +#: ../src/backend/filters/boundingBox.cpp:600 +msgid "Fixed Tick Num" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1165 +#: ../src/backend/filters/boundingBox.cpp:604 msgid "" -"If selected, use as \"bulk\" ion type (can be included in existing clusters)" +"If true, evenly use specified number of ticks. Otherwise, use distance to " +"determine tick count" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1170 -msgid "Bulk Ranges" +#: ../src/backend/filters/boundingBox.cpp:612 +msgid "Num X" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1186 -msgid "Max. Sep + Erode" +#: ../src/backend/filters/boundingBox.cpp:615 +msgid "Tick count in X direction" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1939 -msgid " --------------------------- Parameter selection notice ------------- " +#: ../src/backend/filters/boundingBox.cpp:620 +msgid "Num Y" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1940 -msgid "You have specified a bulk distance larger than half your link distance." +#: ../src/backend/filters/boundingBox.cpp:623 +msgid "Tick count in Y direction" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1941 -msgid "" -"You can do this; thats OK, but the output is no longer independent of the " -"computational process;" +#: ../src/backend/filters/boundingBox.cpp:628 +msgid "Num Z" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1942 -msgid "" -"This will be a problem in the case where two or more clusters can equally " -"lay claim to a \"bulk\" ion. " +#: ../src/backend/filters/boundingBox.cpp:631 +msgid "Tick count in Z direction" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1943 -msgid "" -" If your inter-cluster distance is sufficiently large (larger than your bulk " -"linking distance), then you can get away with this." +#: ../src/backend/filters/boundingBox.cpp:637 +msgid "Spacing X" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1944 -msgid "" -" In theory it is possible to \"join\" the clusters, but this has not been " -"implemented for speed reasons." +#: ../src/backend/filters/boundingBox.cpp:641 +msgid "Distance between ticks on X axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1945 -msgid "" -"If you want this, please contact the author, or just use the source to add " -"this in yourself." +#: ../src/backend/filters/boundingBox.cpp:645 +msgid "Spacing Y" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1946 -msgid "---------------------------------------------------------------------- " +#: ../src/backend/filters/boundingBox.cpp:649 +msgid "Distance between ticks on Y axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1975 -msgid "Build Core" +#: ../src/backend/filters/boundingBox.cpp:653 +msgid "Spacing Z" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2003 -msgid "Core" +#: ../src/backend/filters/boundingBox.cpp:657 +msgid "Distance between ticks on Z axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2126 -msgid "Bulk" +#: ../src/backend/filters/boundingBox.cpp:665 +msgid "Ticks X" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2204 -msgid "Erode" +#: ../src/backend/filters/boundingBox.cpp:669 +msgid "Display tick marks on X axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2282 -msgid "Re-Collate" +#: ../src/backend/filters/boundingBox.cpp:673 +msgid "Ticks Y" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2337 -msgid "Classify Core" +#: ../src/backend/filters/boundingBox.cpp:677 +msgid "Display tick marks on Y axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2428 -msgid "Build Bulk" +#: ../src/backend/filters/boundingBox.cpp:681 +msgid "Ticks Z" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2676 -#: ../src/backend/filters/clusterAnalysis.cpp:2879 -msgid "Cluster Size" +#: ../src/backend/filters/boundingBox.cpp:685 +msgid "Display tick marks on Z axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2677 -#: ../src/backend/filters/clusterAnalysis.cpp:2883 -msgid "Frequency" +#: ../src/backend/filters/boundingBox.cpp:688 +msgid "Tick marks" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2881 -msgid "Composition" +#: ../src/backend/filters/boundingBox.cpp:695 +msgid "Box Colour" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:123 -msgid "Local Density" +#: ../src/backend/filters/boundingBox.cpp:699 +msgid "Colour of the bounding box" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:124 -msgid "Density Filtering" +#: ../src/backend/filters/boundingBox.cpp:704 +msgid "Line thickness" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:125 -msgid "Radial Distribution" +#: ../src/backend/filters/boundingBox.cpp:708 +msgid "Thickness of the lines used to draw the box" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:126 -msgid "Axial Distribution" +#: ../src/backend/filters/boundingBox.cpp:716 +#: ../src/backend/filters/annotation.cpp:856 +msgid "Font Size" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:127 -msgid "Binomial Distribution" +#: ../src/backend/filters/boundingBox.cpp:719 +msgid "Relative size for text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:128 -msgid "Point Em/Replacement" +#: ../src/backend/filters/boundingBox.cpp:724 +msgid "Abs. Coords" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:129 -msgid "Local Concentration" +#: ../src/backend/filters/boundingBox.cpp:727 +msgid "Show labels using aboslute coo-ordinates" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:133 -msgid "Neighbour Count" +#: ../src/backend/filters/annotation.cpp:73 +msgid "Arrow" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:643 -msgid "Load" +#: ../src/backend/filters/annotation.cpp:74 +msgid "Text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:660 -#: ../src/backend/filters/spatialAnalysis.cpp:2330 -#: ../src/backend/filters/spatialAnalysis.cpp:2383 -#: ../src/backend/filters/spatialAnalysis.cpp:2733 -#: ../src/backend/filters/spatialAnalysis.cpp:3022 -#: ../src/backend/filters/spatialAnalysis.cpp:3540 -#: ../src/backend/filters/spatialAnalysis.cpp:4184 -msgid "Build" +#: ../src/backend/filters/annotation.cpp:75 +msgid "Arrow+Text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:705 -#: ../src/backend/filters/spatialAnalysis.cpp:3558 -#: ../src/backend/filters/spatialAnalysis.cpp:4073 -#: ../src/backend/filters/spatialAnalysis.cpp:4201 -msgid "Compute" +#: ../src/backend/filters/annotation.cpp:76 +msgid "Angle" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:803 -msgid "Spatial analysis algorithm to use" +#: ../src/backend/filters/annotation.cpp:77 +msgid "Ruler" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:827 -#: ../src/backend/filters/spatialAnalysis.cpp:878 -msgid "Stop Mode" +#: ../src/backend/filters/annotation.cpp:177 ../src/backend/filter.cpp:55 +msgid "Draw" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:830 -msgid "Method to use to terminate algorithm when examining each point" +#: ../src/backend/filters/annotation.cpp:532 +msgid "Enable" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:837 -msgid "NN Max" +#: ../src/backend/filters/annotation.cpp:535 +msgid "Enable/disable annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:840 -msgid "Maximum number of neighbours to examine" +#: ../src/backend/filters/annotation.cpp:556 +msgid "Type or style of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:847 -msgid "Normalise bins" +#: ../src/backend/filters/annotation.cpp:572 +#: ../src/backend/filters/annotation.cpp:676 +msgid "Text of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:850 -msgid "" -"Normalise counts by binwidth. Needed when comparing NN histograms against " -"one another" +#: ../src/backend/filters/annotation.cpp:580 +msgid "Position of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:856 -msgid "Show Random" +#: ../src/backend/filters/annotation.cpp:584 +#: ../src/backend/filters/annotation.cpp:691 +#: ../src/backend/filters/annotation.cpp:750 +#: ../src/backend/filters/annotation.cpp:839 +msgid "Up dir" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:859 -msgid "Show a fitted (density matched) theoretical distribution" +#: ../src/backend/filters/annotation.cpp:588 +#: ../src/backend/filters/annotation.cpp:843 +msgid "Vector for up direction of annotation text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:870 -msgid "Dist Max" +#: ../src/backend/filters/annotation.cpp:592 +#: ../src/backend/filters/annotation.cpp:698 +#: ../src/backend/filters/annotation.cpp:742 +#: ../src/backend/filters/annotation.cpp:847 +msgid "Across dir" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:873 -msgid "Maximum distance from each point for search" +#: ../src/backend/filters/annotation.cpp:596 +#: ../src/backend/filters/annotation.cpp:851 +msgid "Reading direction for annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:890 -#: ../src/backend/filters/spatialAnalysis.cpp:1024 -msgid "Number of bins for output 1D RDF plot" +#: ../src/backend/filters/annotation.cpp:601 +#: ../src/backend/filters/annotation.cpp:683 +#: ../src/backend/filters/annotation.cpp:777 +msgid "Text size" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:896 -msgid "Surface Remove" +#: ../src/backend/filters/annotation.cpp:605 +#: ../src/backend/filters/annotation.cpp:687 +#: ../src/backend/filters/annotation.cpp:859 +msgid "Relative size of annotation text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:899 -msgid "" -"Exclude surface as part of source to minimise bias in RDF (at cost of " -"increased noise)" +#: ../src/backend/filters/annotation.cpp:617 +#: ../src/backend/filters/annotation.cpp:658 +msgid "3D position for tail of arrow" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:906 -msgid "Remove Dist" +#: ../src/backend/filters/annotation.cpp:625 +#: ../src/backend/filters/annotation.cpp:667 +msgid "3D Position to which arrow points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:909 -msgid "Minimum distance to remove from surface" +#: ../src/backend/filters/annotation.cpp:628 +#: ../src/backend/filters/annotation.cpp:738 +msgid "Positioning" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:917 -#: ../src/backend/filters/spatialAnalysis.cpp:1029 -msgid "Plot colour " +#: ../src/backend/filters/annotation.cpp:633 +#: ../src/backend/filters/annotation.cpp:705 +msgid "Tip radius" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:920 -#: ../src/backend/filters/spatialAnalysis.cpp:1032 -msgid "Colour of output plot" +#: ../src/backend/filters/annotation.cpp:637 +msgid "Size of the arrow head" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:924 -#: ../src/backend/filters/spatialAnalysis.cpp:1010 -#: ../src/backend/filters/spatialAnalysis.cpp:1015 -#: ../src/backend/filters/spatialAnalysis.cpp:1064 -#: ../src/backend/filters/spatialAnalysis.cpp:1103 -msgid "Alg. Params." +#: ../src/backend/filters/annotation.cpp:641 +msgid "Line size" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:937 -#: ../src/backend/filters/spatialAnalysis.cpp:1207 -msgid "Source" +#: ../src/backend/filters/annotation.cpp:645 +msgid "Thickness of line used to draw arrow stem" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:940 -msgid "Ions to use for initiating RDF search" +#: ../src/backend/filters/annotation.cpp:679 +msgid "Options" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:953 -#: ../src/backend/filters/spatialAnalysis.cpp:1223 -#: ../src/backend/filters/spatialAnalysis.cpp:1249 -msgid "Enable/disable ion as source" +#: ../src/backend/filters/annotation.cpp:715 +msgid "Position A" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:958 -#: ../src/backend/filters/spatialAnalysis.cpp:1228 -msgid "Source Ion" +#: ../src/backend/filters/annotation.cpp:719 +msgid "Location of first non-central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:965 ../src/gl/cameras.cpp:611 -msgid "Target" +#: ../src/backend/filters/annotation.cpp:723 +msgid "Origin " msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:968 -#: ../src/backend/filters/spatialAnalysis.cpp:1264 -msgid "Enable/disable all ions as target" +#: ../src/backend/filters/annotation.cpp:727 +msgid "Location of central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:980 -#: ../src/backend/filters/spatialAnalysis.cpp:1276 -msgid "Enable/disable this ion as target" +#: ../src/backend/filters/annotation.cpp:731 +msgid "Position B" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:984 -msgid "Target Ion" +#: ../src/backend/filters/annotation.cpp:735 +msgid "Location of second non-central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:994 -msgid "Cutoff" +#: ../src/backend/filters/annotation.cpp:746 +msgid "Reading direction for angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:997 -msgid "Remove points with local density above/below this value" +#: ../src/backend/filters/annotation.cpp:751 +msgid "Vector for up direction of angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1003 -msgid "Retain Upper" +#: ../src/backend/filters/annotation.cpp:759 +msgid "Reflexive" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1006 -msgid "Retain either points with density above (enabled) or below cutoff" +#: ../src/backend/filters/annotation.cpp:762 +msgid "Measure interor (enabled) or exterior angle (disabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1052 -msgid "Vector between centre and end of cylinder" +#: ../src/backend/filters/annotation.cpp:767 +msgid "Show Angle" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1071 -#: ../src/backend/filters/spatialAnalysis.cpp:3827 -#: ../src/backend/filters/spatialAnalysis.cpp:3886 -msgid "Block size" +#: ../src/backend/filters/annotation.cpp:771 +msgid "Display angle text (when enabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1074 -msgid "Number of ions to use per block" +#: ../src/backend/filters/annotation.cpp:781 +msgid "Size of angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1081 -msgid "Max Block Aspect" +#: ../src/backend/filters/annotation.cpp:799 +msgid "Digit format" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1084 +#: ../src/backend/filters/annotation.cpp:803 msgid "" -"Maximum allowable block aspect ratio. Blocks above this aspect are " -"discarded. Setting too high decreases correlation strength. Too low causes " -"loss of statistical power." +"Format of angle text; # for numeral position, '.' for separator, eg ##.## " +"gives 12.34" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1095 -msgid "Extrusion Direction" +#: ../src/backend/filters/annotation.cpp:809 +#: ../src/backend/filters/annotation.cpp:894 +msgid "Sphere size" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1098 -msgid "Direction in which blocks are extended during construction." +#: ../src/backend/filters/annotation.cpp:813 +#: ../src/backend/filters/annotation.cpp:898 +msgid "Marker sphere size for manipulating tool" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1107 -msgid "Plot Counts" +#: ../src/backend/filters/annotation.cpp:827 +msgid "Ruler beginning 3D location" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1110 -msgid "Show the counts in the binomial histogram" +#: ../src/backend/filters/annotation.cpp:835 +msgid "Ruler finish 3D location" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1119 -msgid "" -"Normalise the counts in the binomial histogram to a probability density " -"function" +#: ../src/backend/filters/annotation.cpp:865 +msgid "Fixed ticks" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1133 -msgid "Display Grid" +#: ../src/backend/filters/annotation.cpp:868 +msgid "" +"Use fixed (enabled) number of text markers, or one every fixed distance " +"(disabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1142 -msgid "View Options" +#: ../src/backend/filters/annotation.cpp:875 +msgid "Num Ticks" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1148 -msgid "Data File" +#: ../src/backend/filters/annotation.cpp:878 +msgid "Number of tick marks along ruler" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1152 -msgid "Pos file of points to subtract/replace/etc" +#: ../src/backend/filters/annotation.cpp:885 +msgid "Tick Spacing" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1157 -msgid "Match Tol." +#: ../src/backend/filters/annotation.cpp:888 +msgid "Distance between tick marks along ruler" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1160 -msgid "Tolerance to allow for matching" +#: ../src/backend/filters/annotation.cpp:912 +msgid "Colour for ruler and ticks" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1176 -msgid "Replacment condition" +#: ../src/backend/filters/ionDownsample.cpp:192 +msgid "Sampling" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1182 -msgid "Replace value" +#: ../src/backend/filters/ionDownsample.cpp:448 +msgid "By Count" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1185 -msgid "Use value data from file when replacing ions" +#: ../src/backend/filters/ionDownsample.cpp:451 +msgid "Sample up to a fixed number of ions" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1190 -msgid "Replacement" +#: ../src/backend/filters/ionDownsample.cpp:457 +msgid "Per Species" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1210 -msgid "Enable/disable all ions as source" +#: ../src/backend/filters/ionDownsample.cpp:461 +msgid "Use species specific (from ranging) sampling values" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1236 -msgid "Ions to use as Numerator for conc. calculation" +#: ../src/backend/filters/ionDownsample.cpp:491 +msgid "Sampling value for species" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1785 -msgid "Spatial analysis aborted by user" +#: ../src/backend/filters/ionDownsample.cpp:498 +#: ../src/backend/filters/ionInfo.cpp:317 +msgid "Unranged" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1786 -msgid "Insufficient memory to complete analysis" +#: ../src/backend/filters/ionDownsample.cpp:507 +#: ../src/backend/filters/ionDownsample.cpp:531 +msgid "Sampling rates" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1787 -msgid "Required range data not present" +#: ../src/backend/filters/ionDownsample.cpp:515 +msgid "Output Count" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1788 -msgid "Insufficient memory for binomial. Reduce input size?" +#: ../src/backend/filters/ionDownsample.cpp:518 +msgid "Sample up to this value of points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1789 -msgid "Insufficient points to continue" +#: ../src/backend/filters/ionDownsample.cpp:523 +msgid "Out Fraction" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1790 -msgid "Unable to load file" +#: ../src/backend/filters/ionDownsample.cpp:527 +msgid "Sample this fraction of points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2437 -#: ../src/backend/filters/spatialAnalysis.cpp:2756 -#: ../src/backend/filters/spatialAnalysis.cpp:3046 -msgid "Analyse" +#: ../src/backend/filters/ionInfo.cpp:37 +msgid "Rectilinear" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2516 -#: ../src/backend/filters/spatialAnalysis.cpp:2606 -#: ../src/backend/filters/spatialAnalysis.cpp:2672 -msgid "Radial Distance" +#: ../src/backend/filters/ionInfo.cpp:38 +msgid "Convex hull" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2518 -#: ../src/backend/filters/spatialAnalysis.cpp:2611 -msgid "Count/Distance" +#: ../src/backend/filters/ionInfo.cpp:200 +msgid "No ions" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2523 -#: ../src/backend/filters/spatialAnalysis.cpp:2616 -msgid "NN Freq." +#: ../src/backend/filters/ionInfo.cpp:226 +#: ../src/backend/filters/spectrumPlot.cpp:433 +msgid "" +"Background fit failed - input data was considered ill formed (gauss-test)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2663 -msgid "Warning, " +#: ../src/backend/filters/ionInfo.cpp:227 +msgid "Following data has not been corrected" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2664 -msgid "" -" points were unable to find neighbour points that exceeded the search " -"radius, and thus terminated prematurely" +#: ../src/backend/filters/ionInfo.cpp:279 +msgid "--Counts--" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2674 -msgid " RDF" +#: ../src/backend/filters/ionInfo.cpp:289 +msgid "Total Ranged\t" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2952 -#: ../src/backend/filters/spatialAnalysis.cpp:3251 -msgid "Number Density (\\#/Vol^3)" +#: ../src/backend/filters/ionInfo.cpp:294 +msgid "Total (incl. unranged)\t" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2977 -#: ../src/backend/filters/spatialAnalysis.cpp:3271 -msgid "Warning," +#: ../src/backend/filters/ionInfo.cpp:307 +msgid "n/a" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2978 -#: ../src/backend/filters/spatialAnalysis.cpp:3272 -msgid " points were un-analysable. These have been dropped" +#: ../src/backend/filters/ionInfo.cpp:330 +msgid "Number of points : " msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3000 -#: ../src/backend/filters/spatialAnalysis.cpp:3294 -msgid "And so on..." +#: ../src/backend/filters/ionInfo.cpp:359 +msgid "Rectilinear Bounds : " msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3376 -msgid "Extract" +#: ../src/backend/filters/ionInfo.cpp:364 +msgid "Volume (len^3): " msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3449 -msgid "Reduce" +#: ../src/backend/filters/ionInfo.cpp:381 +msgid "Convex Volume (len^3): " msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3604 -msgid "Insufficient points to complete analysis" +#: ../src/backend/filters/ionInfo.cpp:384 +msgid "Unable to compute volume" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3627 -msgid "Axial Distance" +#: ../src/backend/filters/ionInfo.cpp:413 +msgid "Ranged Density (pts/vol):" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3629 -msgid " 1D Dist. Func." +#: ../src/backend/filters/ionInfo.cpp:418 +msgid "Total Density (pts/vol):" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3698 -msgid "Binomial" +#: ../src/backend/filters/ionInfo.cpp:448 +msgid "Compositions" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3829 -#: ../src/backend/filters/spatialAnalysis.cpp:3888 -msgid "Rel. Frequency" +#: ../src/backend/filters/ionInfo.cpp:449 +msgid "Display compositional data for points in console" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3966 -msgid "Build Numerator" +#: ../src/backend/filters/ionInfo.cpp:453 +msgid "Counts" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3980 -msgid "Build Denominator" +#: ../src/backend/filters/ionInfo.cpp:454 +msgid "Display count data for points in console" msgstr "" -#: ../src/backend/filters/ionColour.cpp:257 -msgid "Colour Map" +#: ../src/backend/filters/ionInfo.cpp:461 +msgid "Ion data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:265 -msgid "Reverse map" +#: ../src/backend/filters/ionInfo.cpp:469 +msgid "Normalise count data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:266 -msgid "Reverse the colour scale" +#: ../src/backend/filters/ionInfo.cpp:533 +msgid "Volume" msgstr "" -#: ../src/backend/filters/ionColour.cpp:279 -msgid "Opacity" +#: ../src/backend/filters/ionInfo.cpp:536 +msgid "Compute volume for point data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:286 -msgid "Num Colours" +#: ../src/backend/filters/ionInfo.cpp:552 +msgid "Select volume counting technique" msgstr "" -#: ../src/backend/filters/ionColour.cpp:288 -msgid "Number of unique colours to use in colour map" +#: ../src/backend/filters/ionInfo.cpp:565 +msgid "Volume data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:61 +#: ../src/backend/filters/dataLoad.cpp:64 msgid "Auto" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:62 +#: ../src/backend/filters/dataLoad.cpp:65 msgid "Little" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:63 +#: ../src/backend/filters/dataLoad.cpp:66 msgid "Big" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:66 +#: ../src/backend/filters/dataLoad.cpp:69 msgid "POS Data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:67 +#: ../src/backend/filters/dataLoad.cpp:70 msgid "Text Data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:68 +#: ../src/backend/filters/dataLoad.cpp:71 msgid "ATO Data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:248 +#: ../src/backend/filters/dataLoad.cpp:72 +msgid "Tapsim Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:73 +msgid "3Dap/Posap OPS Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:266 msgid " does not exist" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:275 +#: ../src/backend/filters/dataLoad.cpp:293 msgid "Reading File" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:290 -#: ../src/backend/filters/dataLoad.cpp:303 -#: ../src/backend/filters/dataLoad.cpp:347 -#: ../src/backend/filters/dataLoad.cpp:358 -#: ../src/backend/filters/dataLoad.cpp:418 +#: ../src/backend/filters/dataLoad.cpp:308 +#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:365 +#: ../src/backend/filters/dataLoad.cpp:376 +#: ../src/backend/filters/dataLoad.cpp:436 +#: ../src/backend/filters/dataLoad.cpp:458 +#: ../src/backend/filters/dataLoad.cpp:476 msgid "Error loading file: " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:320 +#: ../src/backend/filters/dataLoad.cpp:338 msgid "Sampling is active, loaded " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:339 msgid " available." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:329 +#: ../src/backend/filters/dataLoad.cpp:347 msgid "Loaded entire dataset, " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:329 -#: ../src/backend/filters/dataLoad.cpp:428 +#: ../src/backend/filters/dataLoad.cpp:347 +#: ../src/backend/filters/dataLoad.cpp:446 +#: ../src/backend/filters/dataLoad.cpp:468 +#: ../src/backend/filters/dataLoad.cpp:486 msgid " points." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:373 +#: ../src/backend/filters/dataLoad.cpp:391 msgid "" "Data file contained incorrect number of columns -- should be 3 or 4, was " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:427 +#: ../src/backend/filters/dataLoad.cpp:445 +#: ../src/backend/filters/dataLoad.cpp:467 +#: ../src/backend/filters/dataLoad.cpp:485 msgid "Loaded dataset, " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:460 +#: ../src/backend/filters/dataLoad.cpp:517 msgid "" "Warning:One or more bounds of the loaded data approaches the limits of " "numerical stability for the internal data type(magnitude too large). " "Consider rescaling data before loading" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:485 +#: ../src/backend/filters/dataLoad.cpp:541 +#: ../src/backend/filters/dataLoad.cpp:562 +#: ../src/backend/filters/rangeFile.cpp:561 +#: ../src/backend/filters/rangeFile.cpp:581 +msgid "File" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:542 msgid "File from which to load data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:488 +#: ../src/backend/filters/dataLoad.cpp:545 msgid "" -"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)|*.xml;*.pos;*.txt;*.csv;*." -"ato|All Files|*" +"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)|*.xml;*.pos;*.txt;*." +"csv;*.ato;*.ops|All Files|*" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:498 +#: ../src/backend/filters/dataLoad.cpp:555 msgid "File type" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:500 +#: ../src/backend/filters/dataLoad.cpp:557 msgid "Type of file to be loaded" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:515 +#: ../src/backend/filters/dataLoad.cpp:572 msgid "Entries per point" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:516 -msgid "Number of decimal values in file per 3D point (normally 4)" +#: ../src/backend/filters/dataLoad.cpp:573 +msgid "Number of decimal values in file per 3D point (normally 4)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:590 +msgid "Relative offset of each entry in file for point's X position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:598 +msgid "Relative offset of each entry in file for point's Y position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:606 +msgid "Relative offset of each entry in file for point's Z position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:614 +msgid "" +"Relative offset of each entry in file to use for scalar value of 3D point" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:535 +#: ../src/backend/filters/dataLoad.cpp:630 msgid "File \"Endianness\"" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:536 +#: ../src/backend/filters/dataLoad.cpp:631 msgid "On-disk data storage format. If file won't load, just try each" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:561 -msgid "Relative offset of each entry in file for point's X position" +#: ../src/backend/filters/dataLoad.cpp:643 +msgid "Recon. Width" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:569 -msgid "Relative offset of each entry in file for point's Y position" +#: ../src/backend/filters/dataLoad.cpp:644 +msgid "" +"Width of box onto which to place reconstructed detector hits (similar to tip " +"radius)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:577 -msgid "Relative offset of each entry in file for point's Z position" +#: ../src/backend/filters/dataLoad.cpp:653 +msgid "Ion Volume" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:654 +msgid "Effective volume of an ion (incl. free packing volume)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:585 +#: ../src/backend/filters/dataLoad.cpp:662 +msgid "Det. Efficiency" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:663 msgid "" -"Relative offset of each entry in file to use for scalar value of 3D point" +"Effiency of system (ions evaporated towards detector/ions detected by " +"detector)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:588 +#: ../src/backend/filters/dataLoad.cpp:677 msgid "Value Label" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:592 +#: ../src/backend/filters/dataLoad.cpp:681 msgid "Name for the scalar value associated with each point" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:595 +#: ../src/backend/filters/dataLoad.cpp:684 msgid "Format params." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:601 +#: ../src/backend/filters/dataLoad.cpp:690 msgid "Enabled" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:605 +#: ../src/backend/filters/dataLoad.cpp:694 msgid "Load this file?" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:616 +#: ../src/backend/filters/dataLoad.cpp:705 msgid "Sample data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:619 +#: ../src/backend/filters/dataLoad.cpp:708 msgid "" "Perform random selection on file contents, instead of loading entire file" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:626 +#: ../src/backend/filters/dataLoad.cpp:715 msgid "Load Limit (MB)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:629 +#: ../src/backend/filters/dataLoad.cpp:718 msgid "Limit for size of data to load" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:636 +#: ../src/backend/filters/dataLoad.cpp:725 msgid "Monitor" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:640 +#: ../src/backend/filters/dataLoad.cpp:729 msgid "" "Watch file timestamp to track changes to file contents from other programs" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:644 +#: ../src/backend/filters/dataLoad.cpp:733 msgid "Load params." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:651 +#: ../src/backend/filters/dataLoad.cpp:740 msgid "Default colour " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:654 +#: ../src/backend/filters/dataLoad.cpp:743 msgid "Default colour for points, if not overridden by other filters" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:659 +#: ../src/backend/filters/dataLoad.cpp:748 msgid "Draw Size" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:662 +#: ../src/backend/filters/dataLoad.cpp:751 msgid "Default size for points, if not overridden by other filters" msgstr "" @@ -4789,516 +4742,714 @@ msgid "Max in limit" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:79 -msgid "Probability" -msgstr "" - -#: ../src/backend/filters/spectrumPlot.cpp:170 +#: ../src/backend/filters/spectrumPlot.cpp:171 msgid "Extrema" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:219 +#: ../src/backend/filters/spectrumPlot.cpp:220 msgid "count" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:304 +#: ../src/backend/filters/spectrumPlot.cpp:305 msgid "Mixed data" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:445 +#: ../src/backend/filters/spectrumPlot.cpp:446 msgid "Background:" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:504 +#: ../src/backend/filters/spectrumPlot.cpp:505 msgid "Relative " msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:507 +#: ../src/backend/filters/spectrumPlot.cpp:508 msgid "Probability Density" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:584 +#: ../src/backend/filters/spectrumPlot.cpp:587 msgid "Step size for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:589 +#: ../src/backend/filters/spectrumPlot.cpp:592 msgid "Auto Min/max" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:593 +#: ../src/backend/filters/spectrumPlot.cpp:596 msgid "Automatically compute spectrum upper and lower bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:598 +#: ../src/backend/filters/spectrumPlot.cpp:601 msgid "Min" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:601 +#: ../src/backend/filters/spectrumPlot.cpp:604 msgid "Starting position for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:606 +#: ../src/backend/filters/spectrumPlot.cpp:609 msgid "Max" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:609 +#: ../src/backend/filters/spectrumPlot.cpp:612 msgid "Ending position for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:617 +#: ../src/backend/filters/spectrumPlot.cpp:620 msgid "Logarithmic" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:620 +#: ../src/backend/filters/spectrumPlot.cpp:623 msgid "Convert the plot to logarithmic mode" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:632 +#: ../src/backend/filters/spectrumPlot.cpp:635 msgid "Normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:635 +#: ../src/backend/filters/spectrumPlot.cpp:638 msgid "Rescale the plot height, to make inter-spectrum comparisons easier" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:642 +#: ../src/backend/filters/spectrumPlot.cpp:645 msgid "Lower Bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:646 +#: ../src/backend/filters/spectrumPlot.cpp:649 msgid "Do not use data below this x-value for normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:650 +#: ../src/backend/filters/spectrumPlot.cpp:653 msgid "Upper Bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:654 +#: ../src/backend/filters/spectrumPlot.cpp:657 msgid "Do not use data above this x-value for normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:672 +#: ../src/backend/filters/spectrumPlot.cpp:675 msgid "Visual style of plot" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:679 +#: ../src/backend/filters/spectrumPlot.cpp:682 msgid "Colour of plotted spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:694 +#: ../src/backend/filters/spectrumPlot.cpp:697 msgid "Model" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:697 +#: ../src/backend/filters/spectrumPlot.cpp:700 msgid "Fitting method to use" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:708 +#: ../src/backend/filters/spectrumPlot.cpp:711 msgid "Fit Start" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:709 +#: ../src/backend/filters/spectrumPlot.cpp:712 msgid "Start mass value for fitting background" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:715 +#: ../src/backend/filters/spectrumPlot.cpp:718 msgid "Fit End" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:716 +#: ../src/backend/filters/spectrumPlot.cpp:719 msgid "End mass value for fitting background" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:729 +#: ../src/backend/filters/spectrumPlot.cpp:732 msgid "Corr. Only" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:730 +#: ../src/backend/filters/spectrumPlot.cpp:733 msgid "Only show corrected spectrum, not fit" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:738 +#: ../src/backend/filters/spectrumPlot.cpp:741 msgid "Background Mode" msgstr "" -#: ../src/backend/configFile.cpp:187 -msgid "Config file present, but is not valid (root node test)" +#: ../src/backend/filters/rangeFile.cpp:121 +#: ../src/backend/filters/rangeFile.h:96 +msgid "Ranging" msgstr "" -#: ../src/backend/configFile.cpp:228 -msgid "Unable to interpret recent file entry" +#: ../src/backend/filters/rangeFile.cpp:564 +msgid "File to use for range data" msgstr "" -#: ../src/backend/configFile.cpp:268 -msgid "Unable to determine filter type in defaults listing." +#: ../src/backend/filters/rangeFile.cpp:574 +msgid "Drop unranged" msgstr "" -#: ../src/backend/configFile.cpp:605 -msgid "Online access for non win32/apple platforms is intentionally disabled, " +#: ../src/backend/filters/rangeFile.cpp:576 +msgid "Remove unranged points when generating output" msgstr "" -#: ../src/backend/configFile.cpp:606 -msgid "" -"regardless of the settings you use here. Use your package manager to keep up-" -"to-date" +#: ../src/backend/filters/rangeFile.cpp:586 +msgid "Legend" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:223 -msgid "" -"Parent filter has no output, but filter requires input -- there is no point " -"in placing a child filter here." +#: ../src/backend/filters/rangeFile.cpp:588 +msgid "Display colour legend for enabled ions" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:224 -msgid "Leaf-only filter with child" +#: ../src/backend/filters/rangeFile.cpp:592 +msgid "View" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:608 +msgid "All Ions" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:234 +#: ../src/backend/filters/rangeFile.cpp:609 +msgid "Enable/disable all ions at once" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:617 +msgid "Species" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:624 +msgid "IonID " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:625 +msgid "Enable/disable specified ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:635 +msgid "Active Ion " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:637 +msgid "If true, ion is used in output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:647 +msgid "Colour " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:651 +msgid "Colour used to represent ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:674 +msgid "All Ranges" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:675 +msgid "Enable/disable all ranges" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:690 +msgid "Active Rng " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:693 msgid "" -"Parent filters' output will be blocked by child, without use. Parent results " -"will be dropped." +"Enable/disable specified range (ion must also be enabled to activiate range)" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:235 -#: ../src/backend/filtertreeAnalyse.cpp:249 -msgid "Bad parent->child pair" +#: ../src/backend/filters/rangeFile.cpp:697 +msgid "Ion " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:700 +msgid "Name of ion associate to this range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:709 +msgid "Start rng " +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:712 +msgid "Start value for range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:717 +msgid "End rng " msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:248 +#: ../src/backend/filters/rangeFile.cpp:720 +msgid "Stopping value for range`" +msgstr "" + +#: ../src/backend/state.cpp:165 msgid "" -"First filter does not output anything useable by child filter. Child filter " -"not useful." +"This file is a \"state\" file for the 3Depict program, and stores " +"information about a particular analysis session. This file should be a valid " +"\"XML\" file" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:328 -msgid "Spatial results possibly altered" +#: ../src/backend/state.cpp:337 +msgid "Failed to allocate parser" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:329 +#: ../src/backend/state.cpp:372 msgid "" -"Filters and settings selected that could alter reported results that depend " -"upon density. Check to see if spatial sampling may be happening in the " -"filter tree - this warning is provisional only." +"Unable to retrieve root node in input state file... Is this really a non-" +"empty XML file?" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:397 -msgid "Filter needs parent \"" +#: ../src/backend/state.cpp:379 +msgid "Base state node missing. Is this really a state XML file??" +msgstr "" + +#: ../src/backend/state.cpp:408 +msgid "State was created by a newer version of this program.. " msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:398 +#: ../src/backend/state.cpp:409 +msgid "file reading will continue, but may fail." +msgstr "" + +#: ../src/backend/state.cpp:419 msgid "" -"\" but does not have one. Filter may not function correctly until this " -"parent is given." +"Warning, unparseable version number in state file. File reading will " +"continue, but may fail" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:399 -msgid "Filter missing needed parent" +#: ../src/backend/state.cpp:428 +msgid "Unable to find the \"writer\" node" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:430 -msgid "Bad range filter settings" +#: ../src/backend/state.cpp:438 +msgid "Unable to find the \"backcolour\" node." +msgstr "" + +#: ../src/backend/state.cpp:445 +msgid "\"backcolour\" node missing \"r\" value." +msgstr "" + +#: ../src/backend/state.cpp:450 +msgid "Unable to interpret \"backColour\" node's \"r\" value." +msgstr "" + +#: ../src/backend/state.cpp:458 +msgid "\"backcolour\" node missing \"g\" value." +msgstr "" + +#: ../src/backend/state.cpp:464 +msgid "Unable to interpret \"backColour\" node's \"g\" value." +msgstr "" + +#: ../src/backend/state.cpp:472 +msgid "\"backcolour\" node missing \"b\" value." +msgstr "" + +#: ../src/backend/state.cpp:478 +msgid "Unable to interpret \"backColour\" node's \"b\" value." +msgstr "" + +#: ../src/backend/state.cpp:485 +msgid "\"backcolour\"s rgb values must be in range [0,1]" +msgstr "" + +#: ../src/backend/state.cpp:513 +msgid "Unable to find or interpret \"showaxis\" node" +msgstr "" + +#: ../src/backend/state.cpp:557 +msgid "Unable to locate \"filtertree\" node." +msgstr "" + +#: ../src/backend/state.cpp:573 +msgid "Cameras section missing \"active\" node." +msgstr "" + +#: ../src/backend/state.cpp:581 +msgid "Unable to find property \"value\" for \"cameras->active\" node." +msgstr "" + +#: ../src/backend/state.cpp:587 +msgid "Unable to interpret property \"value\" for \"cameras->active\" node." +msgstr "" + +#: ../src/backend/state.cpp:607 +msgid "Failed to interpret camera state for camera : " +msgstr "" + +#: ../src/backend/state.cpp:615 +msgid "Unable to interpret the camera type for camera : " +msgstr "" + +#: ../src/backend/state.cpp:671 +msgid "Unable to locate stash name for stash " +msgstr "" + +#: ../src/backend/state.cpp:678 +msgid "Empty stash name for stash " +msgstr "" + +#: ../src/backend/state.cpp:687 +msgid "No filter tree for stash:" +msgstr "" + +#: ../src/backend/state.cpp:693 +msgid "For stash " +msgstr "" + +#: ../src/backend/state.cpp:725 +msgid "Unrecognised effect :" +msgstr "" + +#: ../src/backend/state.cpp:735 +msgid "Duplicate effect found" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:431 +#: ../src/backend/state.cpp:735 +msgid " cannot use." +msgstr "" + +#: ../src/backend/state.cpp:745 +msgid "Error reading effect : " +msgstr "" + +#: ../src/backend/state.cpp:965 +msgid "-merge" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:225 msgid "" -"Rangefile set to drop unranged data, however a child filter requires it." +"Parent filter has no output, but filter requires input -- there is no point " +"in placing a child filter here." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:613 -msgid "Composition results possibly altered" +#: ../src/backend/filtertreeAnalyse.cpp:226 +msgid "Leaf-only filter with child" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:614 +#: ../src/backend/filtertreeAnalyse.cpp:236 msgid "" -"Filters and settings selected that could bias reported composition. Check to " -"see if species biasing may occcur in the filter tree - this warning is " -"provisional only." +"Parent filters' output will be blocked by child, without use. Parent results " +"will be dropped." msgstr "" -#: ../src/backend/plot.cpp:29 -msgid "Moving avg." +#: ../src/backend/filtertreeAnalyse.cpp:237 +#: ../src/backend/filtertreeAnalyse.cpp:251 +msgid "Bad parent->child pair" msgstr "" -#: ../src/backend/plot.cpp:33 -msgid "Lines" +#: ../src/backend/filtertreeAnalyse.cpp:250 +msgid "" +"First filter does not output anything useable by child filter. Child filter " +"not useful." msgstr "" -#: ../src/backend/plot.cpp:34 -msgid "Bars" +#: ../src/backend/filtertreeAnalyse.cpp:330 +msgid "Spatial results possibly altered" msgstr "" -#: ../src/backend/plot.cpp:35 -msgid "Steps" +#: ../src/backend/filtertreeAnalyse.cpp:331 +msgid "" +"Filters and settings selected that could alter reported results that depend " +"upon density. Check to see if spatial sampling may be happening in the " +"filter tree - this warning is provisional only." msgstr "" -#: ../src/backend/plot.cpp:36 -msgid "Stem" +#: ../src/backend/filtertreeAnalyse.cpp:399 +msgid "Filter needs parent \"" msgstr "" -#: ../src/backend/plot.cpp:37 -msgid "Points" +#: ../src/backend/filtertreeAnalyse.cpp:400 +msgid "" +"\" but does not have one. Filter may not function correctly until this " +"parent is given." msgstr "" -#: ../src/backend/plot.cpp:39 -msgid "Density" +#: ../src/backend/filtertreeAnalyse.cpp:401 +msgid "Filter missing needed parent" msgstr "" -#: ../src/backend/plot.cpp:40 -msgid "Scatter" +#: ../src/backend/filtertreeAnalyse.cpp:432 +msgid "Bad range filter settings" msgstr "" -#: ../src/backend/plot.cpp:739 ../src/backend/plot.cpp:747 -msgid "Multiple data types" +#: ../src/backend/filtertreeAnalyse.cpp:433 +msgid "" +"Rangefile set to drop unranged data, however a child filter requires it." msgstr "" -#: ../src/backend/plot.cpp:1581 -msgid "error" +#: ../src/backend/filtertreeAnalyse.cpp:529 +msgid "Filter cannot generate data, but has no input - it is at the tree base." msgstr "" -#: ../src/backend/plot.cpp:1821 -msgid "Amplitude" +#: ../src/backend/filtertreeAnalyse.cpp:530 +msgid "Non data-generating filter at root" msgstr "" -#: ../src/backend/filtertree.cpp:1151 -msgid "WARNING: Skipping node " +#: ../src/backend/filtertreeAnalyse.cpp:632 +msgid "Composition results possibly altered" msgstr "" -#: ../src/backend/filtertree.cpp:1151 -msgid " as it was not recognised" +#: ../src/backend/filtertreeAnalyse.cpp:633 +msgid "" +"Filters and settings selected that could bias reported composition. Check to " +"see if species biasing may occcur in the filter tree - this warning is " +"provisional only." msgstr "" -#: ../src/backend/filtertree.cpp:1189 -msgid "Error processing node: " +#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 +#: ../src/backend/APT/APTFileIO.cpp:103 ../src/backend/APT/APTFileIO.cpp:123 +msgid "Error opening file" msgstr "" -#: ../src/gl/cameras.cpp:596 -msgid "Lock" +#: ../src/backend/APT/APTFileIO.cpp:45 +msgid "Only found header, no data" msgstr "" -#: ../src/gl/cameras.cpp:617 -msgid "Up Dir." +#: ../src/backend/APT/APTFileIO.cpp:46 +msgid "Unable to reopen file after first scan" msgstr "" -#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 -msgid "Perspective" +#: ../src/backend/APT/APTFileIO.cpp:47 +msgid "Error whilst reading file contents" msgstr "" -#: ../src/gl/cameras.cpp:631 -msgid "Projection" +#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 +msgid "Unexpected file format" msgstr "" -#: ../src/gl/cameras.cpp:640 -msgid "Field of View (deg)" +#: ../src/backend/APT/APTFileIO.cpp:50 +msgid "Insufficient memory to continue" msgstr "" -#: ../src/gl/cameras.cpp:646 -msgid "View size" +#: ../src/backend/APT/APTFileIO.cpp:54 +msgid "Memory allocation failure on POS load" msgstr "" -#: ../src/3Depict.cpp:397 -msgid "File : " +#: ../src/backend/APT/APTFileIO.cpp:55 +msgid "Error opening pos file" msgstr "" -#: ../src/3Depict.cpp:397 -msgid " does not exist. Skipping" +#: ../src/backend/APT/APTFileIO.cpp:56 +msgid "Pos file empty" msgstr "" -#: ../src/common/constants.cpp:22 -msgid "" -"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " -"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." -"rrng)|*.rrng;*.RRNG|All Files (*)|*" +#: ../src/backend/APT/APTFileIO.cpp:57 +msgid "Pos file size appears to have non-integer number of entries" msgstr "" -#: ../src/common/basics.cpp:183 -msgid "in the future?" +#: ../src/backend/APT/APTFileIO.cpp:58 +msgid "Error reading from pos file (after open)" msgstr "" -#: ../src/common/basics.cpp:234 -msgid "a decade ago" +#: ../src/backend/APT/APTFileIO.cpp:59 +msgid "Error - Found NaN in pos file" msgstr "" -#: ../src/common/basics.cpp:235 -msgid "a year ago" +#: ../src/backend/APT/APTFileIO.cpp:60 +msgid "Error - Found Inf in pos file" msgstr "" -#: ../src/common/basics.cpp:236 -msgid "a month ago" +#: ../src/backend/APT/APTFileIO.cpp:61 +msgid "Pos load aborted by interrupt." msgstr "" -#: ../src/common/basics.cpp:237 -msgid "a week ago" +#: ../src/backend/APT/APTFileIO.cpp:80 +msgid "No numerical data found" msgstr "" -#: ../src/common/basics.cpp:238 -msgid "a day ago" +#: ../src/backend/APT/APTFileIO.cpp:81 +msgid "Error re-opening file, after first scan" msgstr "" -#: ../src/common/basics.cpp:239 -msgid "an hour ago" +#: ../src/backend/APT/APTFileIO.cpp:82 +msgid "Unable to read file contents after open" msgstr "" -#: ../src/common/basics.cpp:240 -msgid "45 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:83 +msgid "Error interpreting field in file" msgstr "" -#: ../src/common/basics.cpp:241 -msgid "30 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:84 +msgid "Incorrect number of fields in file" msgstr "" -#: ../src/common/basics.cpp:242 -msgid "20 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 +msgid "Unable to allocate memory to store data" msgstr "" -#: ../src/common/basics.cpp:243 -msgid "15 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:104 +msgid "File is empty" msgstr "" -#: ../src/common/basics.cpp:244 -msgid "10 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:105 +msgid "Filesize does not match expected format" msgstr "" -#: ../src/common/basics.cpp:245 -msgid "5 minutes ago" +#: ../src/backend/APT/APTFileIO.cpp:106 +msgid "File version number not <4, as expected" msgstr "" -#: ../src/common/basics.cpp:246 -msgid "a minute ago" +#: ../src/backend/APT/APTFileIO.cpp:108 +msgid "Unable to detect endian-ness in file" msgstr "" -#: ../src/common/basics.cpp:247 -msgid "30 seconds ago" +#: ../src/backend/APT/APTFileIO.cpp:122 +msgid "Error interpreting file contents" msgstr "" -#: ../src/common/basics.cpp:248 -msgid "10 seconds ago" +#: ../src/backend/APT/APTFileIO.cpp:124 +msgid "Aborted opening file" msgstr "" -#: ../src/common/basics.cpp:249 -msgid "a second ago" +#: ../src/backend/APT/APTRanges.cpp:48 +msgid "Error opening file, check name and permissions." msgstr "" -#: ../src/common/basics.cpp:254 -msgid "a few decades ago" +#: ../src/backend/APT/APTRanges.cpp:49 +msgid "" +"Error interpreting range file header, expecting ion count and range count, " +"respectively." msgstr "" -#: ../src/common/basics.cpp:255 -msgid "a few years ago" +#: ../src/backend/APT/APTRanges.cpp:50 +msgid "" +"Range file appears to be empty, check file is a proper range file and is not " +"empty." msgstr "" -#: ../src/common/basics.cpp:256 -msgid "a few months ago" +#: ../src/backend/APT/APTRanges.cpp:51 +msgid "Error reading the long name for ion." msgstr "" -#: ../src/common/basics.cpp:257 -msgid "a few weeks ago" +#: ../src/backend/APT/APTRanges.cpp:52 +msgid "Error reading the short name for ion." msgstr "" -#: ../src/common/basics.cpp:258 -msgid "a few days ago" +#: ../src/backend/APT/APTRanges.cpp:53 +msgid "" +"Error reading colour data in the file, expecting 3 decimal values, space " +"separated." msgstr "" -#: ../src/common/basics.cpp:259 -msgid "a few hours ago" +#: ../src/backend/APT/APTRanges.cpp:54 +msgid "" +"Tried skipping to table separator line (line with dashes), but did not find " +"it." msgstr "" -#: ../src/common/basics.cpp:266 -msgid "a few minutes ago" +#: ../src/backend/APT/APTRanges.cpp:55 +msgid "" +"Number of ions in the table header did not match the number specified at the " +"start of the file" msgstr "" -#: ../src/common/basics.cpp:269 -msgid "a few seconds ago" +#: ../src/backend/APT/APTRanges.cpp:56 +msgid "" +"Unexpected failure whilst trying to skip over range lead-in data (bit before " +"range start value)" msgstr "" -#: ../src/common/basics.cpp:296 -msgid "moments ago" +#: ../src/backend/APT/APTRanges.cpp:57 +msgid "" +"Range table had an incorrect number of entries, should be 2 or 3 + number of " +"ranges" msgstr "" -#: ../src/common/colourmap.cpp:242 -msgid "Jet" +#: ../src/backend/APT/APTRanges.cpp:58 +msgid "Unable to read range start and end values" msgstr "" -#: ../src/common/colourmap.cpp:243 -msgid "Hot" +#: ../src/backend/APT/APTRanges.cpp:59 +msgid "Unable to read range table entry" msgstr "" -#: ../src/common/colourmap.cpp:244 -msgid "Cold" +#: ../src/backend/APT/APTRanges.cpp:60 +msgid "" +"Error reading file, unexpected format, are you sure it is a proper range " +"file?" msgstr "" -#: ../src/common/colourmap.cpp:245 -msgid "Grey" +#: ../src/backend/APT/APTRanges.cpp:61 +msgid "" +"Too many ranges appeared to have range entries with no usable data (eg, all " +"blank)" msgstr "" -#: ../src/common/colourmap.cpp:246 -msgid "Cyclic" +#: ../src/backend/APT/APTRanges.cpp:62 +msgid "" +"Range file appears to contain malformed data, check things like start and " +"ends of m/c are not equal or flipped." msgstr "" -#: ../src/common/colourmap.cpp:247 -msgid "General" +#: ../src/backend/APT/APTRanges.cpp:63 +msgid "Range file appears to be inconsistent (eg, overlapping ranges)" msgstr "" -#: ../src/common/colourmap.cpp:248 -msgid "Blue" +#: ../src/backend/APT/APTRanges.cpp:64 +msgid "No ion name mapping found for multiple ion." msgstr "" -#: ../src/common/colourmap.cpp:249 -msgid "Pseudo-Random" +#: ../src/backend/APT/APTRanges.cpp:65 +msgid "Polyatomic extension range matches multiple masses in first section" msgstr "" -#: ../src/wx/wxcomponents.cpp:191 -msgid "Save Data..." +#: ../src/backend/APT/APTRanges.cpp:66 +msgid "Range file is exceedingly large. Refusing to open" msgstr "" -#: ../src/wx/wxcomponents.cpp:192 -msgid "Text File (*.txt)|*.txt|All Files (*)|*" +#: ../src/backend/APT/APTRanges.cpp:1404 +msgid "" +"Range headings do not match order of the ions listed in the name " +"specifications. The name specification ordering will be used when reading " +"the range table, as the range heading section is declared as a comment in " +"the file-format specifications, and is not to be intepreted by this program. " +"Check range-species associations actually match what you expect." msgstr "" -#: ../src/wx/wxcomponents.cpp:204 -msgid "Error saving file. Check output dir is writable." +#: ../src/backend/filter.cpp:54 +msgid "2D Plot" msgstr "" -#: ../src/backend/filters/dataLoad.h:135 -msgid "Pos Data" +#: ../src/backend/filter.cpp:56 +msgid "Range" msgstr "" -#: ../src/backend/filters/ionInfo.h:103 -msgid "Ion info" +#: ../src/backend/filter.cpp:57 +msgid "Voxel" msgstr "" -#: ../src/backend/filters/externalProgram.h:69 -msgid "Ext. Program" +#: ../src/backend/filters/transform.h:71 +msgid "Ion. Transform" msgstr "" -#: ../src/backend/filters/ionColour.h:63 +#: ../src/backend/filters/ionColour.h:66 msgid "Spectral Colour" msgstr "" -#: ../src/backend/filters/profile.h:123 -msgid "Comp. Prof." +#: ../src/backend/filters/boundingBox.h:76 +msgid "Bound box" msgstr "" #: ../src/backend/filters/ionDownsample.h:79 msgid "Ion Sampler" msgstr "" -#: ../src/backend/filters/boundingBox.h:76 -msgid "Bound box" +#: ../src/backend/filters/profile.h:123 +msgid "Comp. Prof." msgstr "" -#: ../src/backend/filters/transform.h:71 -msgid "Ion. Transform" +#: ../src/backend/filters/ionInfo.h:103 +msgid "Ion info" +msgstr "" + +#: ../src/backend/filters/dataLoad.h:145 +msgid "Pos Data" msgstr "" -#: ../src/wx/wxcomponents.h:82 -msgid "treeCtrl" +#: ../src/backend/filters/externalProgram.h:69 +msgid "Ext. Program" msgstr "" #: ../data/startup-tips.txt:5 msgid "" "You can reset the main view by tapping the space bar. Hold down modifier " "keys like shift,ctrl to change the axis. Double tap to switch which axis to " -"look down" +"look the other way (+ve or -ve direction)" msgstr "" #: ../data/startup-tips.txt:6 @@ -5315,7 +5466,8 @@ #: ../data/startup-tips.txt:8 msgid "" "Package files can be easily shared to allow others to view your analysis, " -"using the File->Export->Package menu item" +"using the File->Export->Package menu item. This will automatically import " +"all referenced files (eg pos/rng files) into a single shareable folder" msgstr "" #: ../data/startup-tips.txt:9 @@ -5354,12 +5506,13 @@ #: ../data/startup-tips.txt:15 msgid "" "That anyone can contribute to improving this program, even without knowing " -"about computer programming?" +"about computer programming? Reporting bugs helps us to prioritise our work, " +"and directs us to fix real problems for all users" msgstr "" #: ../data/startup-tips.txt:16 msgid "" -"You can load more than one file at a time, then either operate on the " +"You can load more than one file at a time, then either operate on them " "separately, or together" msgstr "" @@ -5399,8 +5552,8 @@ #: ../data/startup-tips.txt:23 msgid "" -"By creating a camera, you can switch between orthographic and perspective " -"views" +"By creating a camera, you can switch between orthographic (parallel) and " +"perspective views" msgstr "" #: ../data/startup-tips.txt:24 @@ -5408,3 +5561,30 @@ "You can open multiple files at once, and get a side-by-side view by " "translating (shifting) one of the datasets to one side" msgstr "" + +#: ../data/startup-tips.txt:25 +msgid "" +"From version 0.0.20, vector values in filter properties (e.g. \"(1,0,0)\") " +"can be specified using ISO 31-11 spherical coordinates using the following " +"notation , with angles in degrees" +msgstr "" + +#: ../data/startup-tips.txt:26 +msgid "" +"You can change the behavior of filter dragging by holding Ctrl (mac: cmd) or " +"Shift whilst dragging? This switches between move, copy and \"splice" +msgstr "" + +#: ../data/startup-tips.txt:27 +msgid "" +"We like to know where we are being helpful? Please consider writing the " +"program and version number in any work you might publish - whether in print " +"or online. Alternatively, link to our website, or write to us to let us know " +"we helped!" +msgstr "" + +#: ../data/startup-tips.txt:28 +msgid "" +"You can merge files by placing two \"Pos Data\" filters in series, then " +"saving the result?" +msgstr "" Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/translations/3Depict_de_DE.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/translations/3Depict_de_DE.mo differ diff -Nru 3depict-0.0.19-1/translations/3Depict_de_DE.po 3depict-0.0.20/translations/3Depict_de_DE.po --- 3depict-0.0.19-1/translations/3Depict_de_DE.po 2016-05-31 01:15:47.000000000 +0000 +++ 3depict-0.0.20/translations/3Depict_de_DE.po 2017-02-04 23:42:56.000000000 +0000 @@ -1,6 +1,6 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. +# Translation file for 3Depict +# Copyright (C) 2017 +# This file is distributed under the same license as the 3Depict package. # # Translators: # epix1234 , 2011. @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: 3Depict\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-31 11:15+1000\n" +"POT-Creation-Date: 2017-02-04 23:42+0000\n" "PO-Revision-Date: 2012-07-09 08:21+0000\n" "Last-Translator: epix1234 \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/3depict/" @@ -21,6 +21,229 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" +#: ../src/gl/cameras.cpp:596 +msgid "Lock" +msgstr "Sperren" + +#: ../src/gl/cameras.cpp:603 ../src/backend/filters/ionClip.cpp:529 +#: ../src/backend/filters/ionClip.cpp:551 +#: ../src/backend/filters/ionClip.cpp:573 +#: ../src/backend/filters/ionClip.cpp:610 +#: ../src/backend/filters/profile.cpp:1017 +#: ../src/backend/filters/profile.cpp:1055 +#: ../src/backend/filters/transform.cpp:1232 +#: ../src/backend/filters/transform.cpp:1259 +#: ../src/backend/filters/transform.cpp:1285 +#: ../src/backend/filters/annotation.cpp:576 +msgid "Origin" +msgstr "Ursprung" + +#: ../src/gl/cameras.cpp:611 ../src/backend/filters/spatialAnalysis.cpp:872 +msgid "Target" +msgstr "Ziel" + +#: ../src/gl/cameras.cpp:617 +msgid "Up Dir." +msgstr "Up Dir." + +#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 +msgid "Perspective" +msgstr "Perspektivisch" + +#: ../src/gl/cameras.cpp:627 ../src/gl/cameras.cpp:730 +#: ../src/gui/mainFrame.cpp:5416 +msgid "Orthogonal" +msgstr "Orthogonal" + +#: ../src/gl/cameras.cpp:631 +msgid "Projection" +msgstr "Projektion" + +#: ../src/gl/cameras.cpp:640 +msgid "Field of View (deg)" +msgstr "Bildausschnitt" + +#: ../src/gl/cameras.cpp:646 +msgid "View size" +msgstr "Anzeigegröße" + +#: ../src/wx/wxcomponents.cpp:191 +msgid "Save Data..." +msgstr "Datei speichern..." + +#: ../src/wx/wxcomponents.cpp:192 +msgid "Text File (*.txt)|*.txt|All Files (*)|*" +msgstr "Text Datei (*.txt)|*.txt|Alle Dateien (*)|*" + +#: ../src/wx/wxcomponents.cpp:204 +msgid "Error saving file. Check output dir is writable." +msgstr "" +"Fehler beim Schreiben der Datei. Stellen Sie sicher, dass das " +"Zielverzeichnis nicht schreibgeschüzt ist." + +#: ../src/wx/wxcomponents.cpp:204 ../src/gui/dialogs/ExportRngDialog.cpp:187 +#: ../src/gui/mainFrame.cpp:1478 ../src/gui/mainFrame.cpp:1603 +#: ../src/gui/mainFrame.cpp:1652 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2284 ../src/gui/mainFrame.cpp:2357 +#: ../src/gui/mainFrame.cpp:2460 ../src/gui/mainFrame.cpp:2573 +msgid "Save error" +msgstr "Fehler speichern" + +#: ../src/common/basics.cpp:183 +msgid "in the future?" +msgstr "in Zukunft?" + +#: ../src/common/basics.cpp:234 +msgid "a decade ago" +msgstr "vor zehn Jahren" + +#: ../src/common/basics.cpp:235 +msgid "a year ago" +msgstr "vor einem Jahr" + +#: ../src/common/basics.cpp:236 +msgid "a month ago" +msgstr "vor einem Monat" + +#: ../src/common/basics.cpp:237 +msgid "a week ago" +msgstr "vor einer Woche" + +#: ../src/common/basics.cpp:238 +msgid "a day ago" +msgstr "gestern" + +#: ../src/common/basics.cpp:239 +msgid "an hour ago" +msgstr "vor einer Stunde" + +#: ../src/common/basics.cpp:240 +msgid "45 minutes ago" +msgstr "vor 45 Minuten" + +#: ../src/common/basics.cpp:241 +msgid "30 minutes ago" +msgstr "vor 30 Minuten" + +#: ../src/common/basics.cpp:242 +msgid "20 minutes ago" +msgstr "vor 20 Minuten" + +#: ../src/common/basics.cpp:243 +msgid "15 minutes ago" +msgstr "vor 15 Minuten" + +#: ../src/common/basics.cpp:244 +msgid "10 minutes ago" +msgstr "vor 10 Minuten" + +#: ../src/common/basics.cpp:245 +msgid "5 minutes ago" +msgstr "vor 5 Minuten" + +#: ../src/common/basics.cpp:246 +msgid "a minute ago" +msgstr "vor einer Minute" + +#: ../src/common/basics.cpp:247 +msgid "30 seconds ago" +msgstr "vor 30 Sekunden" + +#: ../src/common/basics.cpp:248 +msgid "10 seconds ago" +msgstr "vor 10 Sekunden" + +#: ../src/common/basics.cpp:249 +msgid "a second ago" +msgstr "vor einer Sekunde" + +#: ../src/common/basics.cpp:254 +msgid "a few decades ago" +msgstr "vor einigen Dekaden" + +#: ../src/common/basics.cpp:255 +msgid "a few years ago" +msgstr "vor einigen Jahren" + +#: ../src/common/basics.cpp:256 +msgid "a few months ago" +msgstr "vor einigen Monaten" + +#: ../src/common/basics.cpp:257 +msgid "a few weeks ago" +msgstr "vor einigen Wochen" + +#: ../src/common/basics.cpp:258 +msgid "a few days ago" +msgstr "vor einigen Tagen" + +#: ../src/common/basics.cpp:259 +msgid "a few hours ago" +msgstr "vor einigen Stunden" + +#: ../src/common/basics.cpp:262 +msgid "tens of minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:266 +msgid "a few minutes ago" +msgstr "vor einigen Minuten" + +#: ../src/common/basics.cpp:269 +msgid "a few seconds ago" +msgstr "vor einigen Sekunden" + +#: ../src/common/basics.cpp:296 +msgid "moments ago" +msgstr "kürzlich" + +#: ../src/common/colourmap.cpp:307 +msgid "Jet" +msgstr "Jet" + +#: ../src/common/colourmap.cpp:308 +msgid "Hot" +msgstr "Heiss" + +#: ../src/common/colourmap.cpp:309 +msgid "Cold" +msgstr "Kalt" + +#: ../src/common/colourmap.cpp:310 +msgid "Grey" +msgstr "Grau" + +#: ../src/common/colourmap.cpp:311 +msgid "Cyclic" +msgstr "Cyclic" + +#: ../src/common/colourmap.cpp:312 +msgid "General" +msgstr "Allgemein" + +#: ../src/common/colourmap.cpp:313 +msgid "Blue" +msgstr "Blau" + +#: ../src/common/colourmap.cpp:314 +msgid "Pseudo-Random" +msgstr "Pseudo-Random" + +#: ../src/common/colourmap.cpp:315 +msgid "Inferno" +msgstr "" + +#: ../src/common/colourmap.cpp:316 +msgid "Viridis" +msgstr "" + +#: ../src/common/constants.cpp:22 +msgid "" +"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " +"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." +"rrng)|*.rrng;*.RRNG|All Files (*)|*" +msgstr "" + #: ../src/gui/glPane.cpp:642 msgid "Use shift/ctrl-space or double tap to alter reset axis" msgstr "" @@ -47,9 +270,9 @@ msgid "Saving Image " msgstr "Speichere Bild " -#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4401 -#: ../src/gui/mainFrame.cpp:4405 ../src/gui/mainFrame.cpp:4418 -#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4504 +#: ../src/gui/mainFrame.cpp:4508 ../src/gui/mainFrame.cpp:4521 +#: ../src/backend/filters/dataLoad.cpp:339 msgid " of " msgstr " von " @@ -66,14 +289,14 @@ msgstr "Source Filter" #: ../src/gui/dialogs/ExportRngDialog.cpp:54 -#: ../src/backend/filters/rangeFile.cpp:656 +#: ../src/backend/filters/rangeFile.cpp:657 msgid "Ions" msgstr "Ionen" #: ../src/gui/dialogs/ExportRngDialog.cpp:55 #: ../src/gui/dialogs/rangeEditDialog.cpp:1587 -#: ../src/backend/filters/voxelise.cpp:834 -#: ../src/backend/filters/rangeFile.cpp:723 +#: ../src/backend/filters/voxelise.cpp:1049 +#: ../src/backend/filters/rangeFile.cpp:724 msgid "Ranges" msgstr "Ranges" @@ -82,10 +305,10 @@ msgstr "Param." #: ../src/gui/dialogs/ExportRngDialog.cpp:89 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:105 #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:352 -#: ../src/backend/filters/dataLoad.cpp:581 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 +#: ../src/backend/filters/dataLoad.cpp:610 msgid "Value" msgstr "Wert" @@ -102,7 +325,7 @@ msgstr "Num Ranges" #: ../src/gui/dialogs/ExportRngDialog.cpp:116 -#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:53 +#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:52 msgid "Ion" msgstr "Ion" @@ -114,7 +337,7 @@ msgid "Range end" msgstr "Range Ende" -#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2376 +#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2395 msgid "Save pos..." msgstr "pos speichern..." @@ -124,23 +347,15 @@ "(*.env)|*.env|All Files (*)|*" msgstr "" -#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1463 -#: ../src/gui/mainFrame.cpp:1638 ../src/gui/mainFrame.cpp:1713 -#: ../src/gui/mainFrame.cpp:2266 ../src/gui/mainFrame.cpp:2443 -#: ../src/gui/mainFrame.cpp:2556 +#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1478 +#: ../src/gui/mainFrame.cpp:1653 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2285 ../src/gui/mainFrame.cpp:2461 +#: ../src/gui/mainFrame.cpp:2574 msgid "Unable to save. Check output destination can be written to." msgstr "" "Speichern nicht möglich. Bitte überprüfen Sie ob der Ausgabepfad " "schreibgeschützt ist." -#: ../src/gui/dialogs/ExportRngDialog.cpp:187 ../src/gui/mainFrame.cpp:1463 -#: ../src/gui/mainFrame.cpp:1588 ../src/gui/mainFrame.cpp:1637 -#: ../src/gui/mainFrame.cpp:1713 ../src/gui/mainFrame.cpp:2265 -#: ../src/gui/mainFrame.cpp:2338 ../src/gui/mainFrame.cpp:2442 -#: ../src/gui/mainFrame.cpp:2555 ../src/wx/wxcomponents.cpp:204 -msgid "Save error" -msgstr "Fehler speichern" - #: ../src/gui/dialogs/ExportRngDialog.cpp:253 msgid "Export Range" msgstr "Range exportieren" @@ -153,240 +368,115 @@ msgid "Detailed view of selected range" msgstr "Detailierte Ansicht des ausgewählten Range" -#: ../src/gui/dialogs/animateFilterDialog.cpp:92 -msgid "Cameca/Ametek RRNG" +#: ../src/gui/dialogs/rangeEditDialog.cpp:221 +msgid "Show Overlays" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:93 -msgid "Oak-Ridge RNG" +#: ../src/gui/dialogs/rangeEditDialog.cpp:246 +msgid "e.g. H2O" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:94 -msgid "Cameca/Ametek ENV" -msgstr "" +#: ../src/gui/dialogs/rangeEditDialog.cpp:561 +#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:6071 +#: ../src/backend/filter.cpp:53 +msgid "Plot" +msgstr "Plot" -#: ../src/gui/dialogs/animateFilterDialog.cpp:156 -msgid "Key frames" -msgstr "" +#: ../src/gui/dialogs/rangeEditDialog.cpp:562 +msgid "Short Name" +msgstr "Kurz Name" -#: ../src/gui/dialogs/animateFilterDialog.cpp:157 -msgid "Output Data" +#: ../src/gui/dialogs/rangeEditDialog.cpp:563 +msgid "Long Name" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:158 -msgid "Filters and properties" -msgstr "" +#: ../src/gui/dialogs/rangeEditDialog.cpp:564 +#: ../src/backend/filters/voxelise.cpp:1188 +#: ../src/backend/filters/profile.cpp:1159 +#: ../src/backend/filters/annotation.cpp:909 +#: ../src/backend/filters/spectrumPlot.cpp:679 +msgid "Colour" +msgstr "Farbe" -#: ../src/gui/dialogs/animateFilterDialog.cpp:164 -msgid "Dir : " -msgstr "" +#: ../src/gui/dialogs/rangeEditDialog.cpp:697 +#: ../src/backend/filters/annotation.cpp:613 +#: ../src/backend/filters/annotation.cpp:654 +#: ../src/backend/filters/annotation.cpp:823 +msgid "Start" +msgstr "Anfang" -#: ../src/gui/dialogs/animateFilterDialog.cpp:167 -msgid "Output only when refresh required" +#: ../src/gui/dialogs/rangeEditDialog.cpp:698 +#: ../src/backend/filters/annotation.cpp:621 +#: ../src/backend/filters/annotation.cpp:663 +#: ../src/backend/filters/annotation.cpp:831 +msgid "End" +msgstr "Ende" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 +msgid "Range or ion?" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:169 -msgid "Data Types:" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 +msgid "Select type to add" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:170 -msgid "3D Images" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 +msgid "Range Editor" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:171 -msgid "File Prefix: " -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:173 -msgid "Size : " -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:175 -msgid "..." -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:176 -msgid "Point data" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:177 -#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 -msgid "Plots" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:178 -msgid "Voxel data" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:179 -msgid "Range files" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:180 -msgid "Format" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:197 -#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 -#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 -msgid "Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:702 -msgid "transition frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:702 -#: ../src/gui/mainFrame.cpp:1690 -msgid "Frame count" -msgstr "Bildanzahl" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:774 -msgid "Key frame : Colour" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:827 -msgid "File existed, but was unable to read or interpret file contents." -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:828 -msgid "String load failed" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:849 -msgid "Keyframe : decimal" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:858 -msgid "Keyframe : integer" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:867 -msgid "Keyframe : 3D Point" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:995 -msgid "Select or create new folder" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 -msgid "Export Animation" -msgstr "Animation exportieren" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 -msgid "Select filter" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1177 -msgid "Select property" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 -msgid "Filter" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 -#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 -msgid "Property" -msgstr "Eigenschaft" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 -#: ../src/backend/filters/annotation.cpp:545 -#: ../src/backend/filters/annotation.cpp:551 -#: ../src/backend/filters/transform.cpp:1150 -#: ../src/backend/filters/ionDownsample.cpp:465 -#: ../src/backend/filters/spatialAnalysis.cpp:1173 -msgid "Mode" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 -#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 -msgid "Start Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 -#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 -msgid "End Frame" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 -msgid "Keyframe table" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 -msgid "Remove the selected keyframe from the table" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 -msgid "Enter where the animation frames will be exported to" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1187 -msgid "Browse to directory where the animation frames will be exported to" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 -msgid "" -"Title for files, result will be saved as #-name.png, where # is image number." -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 -msgid "Target resolution (image size)" -msgstr "" - -#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 -msgid "Select frame for property display" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 +msgid "Enable or disable all overlays" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 -msgid "Enter frame number to change frame (eg 1/20)" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 +msgid "Entered overlays, use delete to remove" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 -msgid "Save point data (POS files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 +msgid "Available plots for ranging" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 -msgid "Save plots (as text files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 +msgid "Enter species to display as overlay, e.g. SiO2" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 -msgid "Save voxel data (raw files) in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 +msgid "Editable ranges" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1196 -msgid "Save range files in output folder?" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 +msgid "Editable ions" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 -msgid "Animation parameters for current frame" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 +#: ../src/gui/dialogs/animateFilterDialog.cpp:177 +msgid "Plots" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 -msgid "Abort animation" +#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 +msgid "Overlay" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1203 -msgid "Run Animation" +#: ../src/gui/dialogs/autosaveDialog.cpp:39 +msgid "Remove &All" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 -msgid "Filter view" +#: ../src/gui/dialogs/autosaveDialog.cpp:123 +msgid "Restore state?" msgstr "" -#: ../src/gui/dialogs/animateFilterDialog.cpp:1275 -msgid "Frame view" +#: ../src/gui/dialogs/autosaveDialog.cpp:133 +msgid "Multiple autosave states were found; would you like to restore one?" msgstr "" -#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:476 -#: ../src/backend/filter.cpp:479 +#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:481 +#: ../src/backend/filter.cpp:484 msgid "Error" -msgstr "" +msgstr "Fehler" #: ../src/gui/dialogs/filterErrorDialog.cpp:39 msgid "Warning" -msgstr "" +msgstr "Warnung" #: ../src/gui/dialogs/filterErrorDialog.cpp:42 #: ../src/gui/dialogs/filterErrorDialog.cpp:52 @@ -403,7 +493,7 @@ #: ../src/gui/dialogs/StashDialog.cpp:54 msgid "Properties" -msgstr "" +msgstr "Eigenschaften" #: ../src/gui/dialogs/StashDialog.cpp:60 msgid "Stash Name" @@ -433,35 +523,6 @@ msgid "Available stashes" msgstr "Verfügbare Stash" -#: ../src/gui/dialogs/resolutionDialog.cpp:45 -msgid "Width :" -msgstr "" - -#: ../src/gui/dialogs/resolutionDialog.cpp:47 -msgid "Height :" -msgstr "" - -#: ../src/gui/dialogs/resolutionDialog.cpp:50 -#: ../src/gui/dialogs/prefDialog.cpp:85 -msgid "Reset" -msgstr "Zurücksetzen" - -#: ../src/gui/dialogs/resolutionDialog.cpp:336 -msgid "Resolution Selection" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:39 -msgid "Remove &All" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:123 -msgid "Restore state?" -msgstr "" - -#: ../src/gui/dialogs/autosaveDialog.cpp:133 -msgid "Multiple autosave states were found; would you like to restore one?" -msgstr "" - #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:45 msgid "Start Frame: " msgstr "" @@ -474,9 +535,15 @@ msgid "From Table" msgstr "" +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 +#: ../src/gui/dialogs/animateFilterDialog.cpp:197 +msgid "Frame" +msgstr "" + #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:240 msgid "Select text file..." -msgstr "" +msgstr "Text Datei wahlen" #: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:241 msgid "Text files (*.txt)|*.txt;|All Files (*)|*" @@ -538,6 +605,16 @@ msgid "Ramp" msgstr "" +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 +msgid "Start Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 +msgid "End Frame" +msgstr "" + #: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:73 msgid "Initial Value" msgstr "" @@ -566,32 +643,309 @@ msgid "Colour at end of transition" msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:73 -msgid "Panel Display" -msgstr "Panel Display" +#: ../src/gui/dialogs/animateFilterDialog.cpp:92 +msgid "Cameca/Ametek RRNG" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:75 -msgid "Online Updates" -msgstr "Online Updates" +#: ../src/gui/dialogs/animateFilterDialog.cpp:93 +msgid "Oak-Ridge RNG" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 -msgid "Startup" -msgstr "Startup" +#: ../src/gui/dialogs/animateFilterDialog.cpp:94 +msgid "Cameca/Ametek ENV" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:78 -msgid "Camera Speed" -msgstr "Kamerageschwindigkeit" +#: ../src/gui/dialogs/animateFilterDialog.cpp:156 +msgid "Key frames" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:79 -msgid "Available Filters" -msgstr "Verfügbare Filter" +#: ../src/gui/dialogs/animateFilterDialog.cpp:157 +msgid "Output Data" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:84 -msgid "Reset All" -msgstr "Alle zurücksetzen" +#: ../src/gui/dialogs/animateFilterDialog.cpp:158 +msgid "Filters and properties" +msgstr "" -#: ../src/gui/dialogs/prefDialog.cpp:87 -msgid "Show all panels" +#: ../src/gui/dialogs/animateFilterDialog.cpp:164 +msgid "Dir : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:167 +msgid "Output only when refresh required" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:169 +msgid "Data Types:" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:170 +msgid "3D Images" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:171 +msgid "File Prefix: " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:173 +msgid "Size : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:175 +msgid "..." +msgstr "..." + +#: ../src/gui/dialogs/animateFilterDialog.cpp:176 +msgid "Point data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:178 +msgid "Voxel data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:179 +msgid "Range files" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:180 +msgid "Format" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 +msgid "transition frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 ../src/gui/mainFrame.cpp:1705 +msgid "Frame count" +msgstr "Bildanzahl" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:773 +msgid "Key frame : Colour" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:826 +msgid "File existed, but was unable to read or interpret file contents." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:827 +msgid "String load failed" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:848 +msgid "Keyframe : decimal" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:857 +msgid "Keyframe : integer" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:866 +msgid "Keyframe : 3D Point" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:994 +msgid "Select or create new folder" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1174 +msgid "Export Animation" +msgstr "Animation exportieren" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 +msgid "Select filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 +msgid "Select property" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1178 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1197 +msgid "Filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 +msgid "Property" +msgstr "Eigenschaft" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 +#: ../src/backend/filters/spatialAnalysis.cpp:1062 +#: ../src/backend/filters/transform.cpp:1149 +#: ../src/backend/filters/annotation.cpp:553 +#: ../src/backend/filters/annotation.cpp:559 +#: ../src/backend/filters/ionDownsample.cpp:466 +msgid "Mode" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 +msgid "Keyframe table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 +msgid "Remove the selected keyframe from the table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 +msgid "Enter where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 +msgid "Browse to directory where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1188 +msgid "" +"Title for files, result will be saved as #-name.png, where # is image number." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 +msgid "Target resolution (image size)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 +msgid "Select frame for property display" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 +msgid "Enter frame number to change frame (eg 1/20)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 +msgid "Save point data (POS files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 +msgid "Save plots (as text files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 +msgid "Save voxel data (raw files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 +msgid "Save range files in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 +msgid "Animation parameters for current frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 +msgid "Abort animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 +msgid "Run Animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1273 +msgid "Filter view" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 +msgid "Frame view" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:45 +msgid "Width :" +msgstr "Breite :" + +#: ../src/gui/dialogs/resolutionDialog.cpp:47 +msgid "Height :" +msgstr "Höhe :" + +#: ../src/gui/dialogs/resolutionDialog.cpp:50 +#: ../src/gui/dialogs/prefDialog.cpp:85 +msgid "Reset" +msgstr "Zurücksetzen" + +#: ../src/gui/dialogs/resolutionDialog.cpp:336 +msgid "Resolution Selection" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:63 +msgid "Export:" +msgstr "Exportieren:" + +#: ../src/gui/dialogs/ExportPos.cpp:64 +#: ../src/backend/filters/boundingBox.cpp:568 +msgid "Visible" +msgstr "Sichtbar" + +#: ../src/gui/dialogs/ExportPos.cpp:65 +msgid "Selected Data" +msgstr "Daten auswählen" + +#: ../src/gui/dialogs/ExportPos.cpp:67 +msgid "Available Data" +msgstr "Verfügbare Daten" + +#: ../src/gui/dialogs/ExportPos.cpp:73 +msgid "Selection" +msgstr "Auswahl" + +#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 +msgid "Index" +msgstr "Index" + +#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 +#: ../src/backend/filters/spatialAnalysis.cpp:2388 +#: ../src/backend/filters/spatialAnalysis.cpp:2481 +#: ../src/backend/filters/spatialAnalysis.cpp:2541 +#: ../src/backend/filters/spatialAnalysis.cpp:3292 +#: ../src/backend/filters/spatialAnalysis.cpp:3481 +#: ../src/backend/filters/profile.cpp:608 +#: ../src/backend/filters/spectrumPlot.cpp:65 +msgid "Count" +msgstr "Anzahl" + +#: ../src/gui/dialogs/ExportPos.cpp:451 +msgid "Export Pos Data" +msgstr "POS Daten exportieren" + +#: ../src/gui/dialogs/ExportPos.cpp:454 +msgid "Tree of filters, select leaves to show ion data." +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:456 +msgid "Add all data from all filters" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:457 +msgid "Add all data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:458 +msgid "Add selected data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:73 +msgid "Panel Display" +msgstr "Panel Display" + +#: ../src/gui/dialogs/prefDialog.cpp:75 +msgid "Online Updates" +msgstr "Online Updates" + +#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 +msgid "Startup" +msgstr "Startup" + +#: ../src/gui/dialogs/prefDialog.cpp:78 +msgid "Camera Speed" +msgstr "Kamerageschwindigkeit" + +#: ../src/gui/dialogs/prefDialog.cpp:79 +msgid "Available Filters" +msgstr "Verfügbare Filter" + +#: ../src/gui/dialogs/prefDialog.cpp:84 +msgid "Reset All" +msgstr "Alle zurücksetzen" + +#: ../src/gui/dialogs/prefDialog.cpp:87 +msgid "Show all panels" msgstr "Zeige alle Fenster" #: ../src/gui/dialogs/prefDialog.cpp:88 @@ -610,7 +964,7 @@ msgid "Raw Data Panel" msgstr "Rohdatenfenster" -#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:691 +#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:693 msgid "Plot List" msgstr "Plotliste" @@ -696,147 +1050,6 @@ msgid "Camera" msgstr "Kamera" -#: ../src/gui/dialogs/ExportPos.cpp:63 -msgid "Export:" -msgstr "Exportieren:" - -#: ../src/gui/dialogs/ExportPos.cpp:64 -#: ../src/backend/filters/boundingBox.cpp:567 -msgid "Visible" -msgstr "Sichtbar" - -#: ../src/gui/dialogs/ExportPos.cpp:65 -msgid "Selected Data" -msgstr "Daten auswählen" - -#: ../src/gui/dialogs/ExportPos.cpp:67 -msgid "Available Data" -msgstr "Verfügbare Daten" - -#: ../src/gui/dialogs/ExportPos.cpp:73 -msgid "Selection" -msgstr "Auswahl" - -#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 -msgid "Index" -msgstr "Index" - -#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 -#: ../src/backend/filters/profile.cpp:604 -#: ../src/backend/filters/spatialAnalysis.cpp:2520 -#: ../src/backend/filters/spatialAnalysis.cpp:2613 -#: ../src/backend/filters/spatialAnalysis.cpp:2673 -#: ../src/backend/filters/spatialAnalysis.cpp:3628 -#: ../src/backend/filters/spatialAnalysis.cpp:3831 -#: ../src/backend/filters/spatialAnalysis.cpp:3890 -#: ../src/backend/filters/spectrumPlot.cpp:65 -msgid "Count" -msgstr "Anzahl" - -#: ../src/gui/dialogs/ExportPos.cpp:451 -msgid "Export Pos Data" -msgstr "POS Daten exportieren" - -#: ../src/gui/dialogs/ExportPos.cpp:454 -msgid "Tree of filters, select leaves to show ion data." -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:456 -msgid "Add all data from all filters" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:457 -msgid "Add all data from currently selected filter" -msgstr "" - -#: ../src/gui/dialogs/ExportPos.cpp:458 -msgid "Add selected data from currently selected filter" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:221 -msgid "Show Overlays" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:246 -msgid "e.g. H2O" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:561 -#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:5966 -#: ../src/backend/filter.cpp:54 -msgid "Plot" -msgstr "Plot" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:562 -msgid "Short Name" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:563 -msgid "Long Name" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:564 -#: ../src/backend/filters/annotation.cpp:901 -#: ../src/backend/filters/voxelise.cpp:976 -#: ../src/backend/filters/profile.cpp:1155 -#: ../src/backend/filters/spectrumPlot.cpp:676 -msgid "Colour" -msgstr "Farbe" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:697 -#: ../src/backend/filters/annotation.cpp:605 -#: ../src/backend/filters/annotation.cpp:646 -#: ../src/backend/filters/annotation.cpp:815 -msgid "Start" -msgstr "Anfang" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:698 -#: ../src/backend/filters/annotation.cpp:613 -#: ../src/backend/filters/annotation.cpp:655 -#: ../src/backend/filters/annotation.cpp:823 -msgid "End" -msgstr "Ende" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 -msgid "Range or ion?" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 -msgid "Select type to add" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 -msgid "Range Editor" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 -msgid "Enable or disable all overlays" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 -msgid "Entered overlays, use delete to remove" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 -msgid "Available plots for ranging" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 -msgid "Enter species to display as overlay, e.g. SiO2" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 -msgid "Editable ranges" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 -msgid "Editable ions" -msgstr "" - -#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 -msgid "Overlay" -msgstr "" - #: ../src/gui/mainFrame.cpp:119 msgid "New camera name..." msgstr "Neuer Kameraname..." @@ -849,8 +1062,8 @@ msgid "New Filter..." msgstr "" -#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:560 -#: ../src/backend/filters/annotation.cpp:664 +#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:568 +#: ../src/backend/filters/annotation.cpp:672 #: ../src/backend/filters/annotation.h:96 msgid "Annotation" msgstr "Kommentar" @@ -900,19 +1113,19 @@ msgid "Range File" msgstr "Rangedatei" -#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:202 +#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:192 msgid "Spat. Analysis" msgstr "Räumliche Analyse" -#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:122 +#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:126 msgid "Voxelisation" msgstr "Voxelisation" -#: ../src/gui/mainFrame.cpp:451 +#: ../src/gui/mainFrame.cpp:453 msgid "OpenGL Failed" msgstr "OpenGL fehlgeschlagen" -#: ../src/gui/mainFrame.cpp:452 ../src/gui/mainFrame.cpp:454 +#: ../src/gui/mainFrame.cpp:454 ../src/gui/mainFrame.cpp:456 msgid "" "Unable to initialise the openGL (3D) panel. Program cannot start. Please " "check your video drivers." @@ -920,435 +1133,439 @@ "Kann das OpenGL (3D)-Panel nicht initialisieren. Das Programm kann nicht " "gestartet werden. Bitte überprüfen Sie Ihren Video-Treiber." -#: ../src/gui/mainFrame.cpp:475 +#: ../src/gui/mainFrame.cpp:477 msgid "&Open...\tCtrl+O" msgstr "&Öffnen...\tCtrl+O" -#: ../src/gui/mainFrame.cpp:475 +#: ../src/gui/mainFrame.cpp:477 msgid "Open state file" msgstr "Statusdatei öffnen" -#: ../src/gui/mainFrame.cpp:476 +#: ../src/gui/mainFrame.cpp:478 msgid "&Merge...\tCtrl+Shift+O" msgstr "&Zusammenführen...\tCtrl+Shift+O" -#: ../src/gui/mainFrame.cpp:476 +#: ../src/gui/mainFrame.cpp:478 msgid "Merge other file" msgstr "Merge other file" -#: ../src/gui/mainFrame.cpp:480 +#: ../src/gui/mainFrame.cpp:482 msgid "&Recent" msgstr "&Letzte" -#: ../src/gui/mainFrame.cpp:481 +#: ../src/gui/mainFrame.cpp:483 msgid "&Save\tCtrl+S" msgstr "&Speichern\tCtrl+S" -#: ../src/gui/mainFrame.cpp:481 +#: ../src/gui/mainFrame.cpp:483 msgid "Save state to file" msgstr "Status in Datei speichern" -#: ../src/gui/mainFrame.cpp:483 +#: ../src/gui/mainFrame.cpp:485 msgid "Save &As...\tCtrl+Shift+S" msgstr "Speichern &als...\tCtrl+Shift+S" -#: ../src/gui/mainFrame.cpp:483 +#: ../src/gui/mainFrame.cpp:485 msgid "Save current state to new file" msgstr "Aktuellen Status als neue Datei speichern" -#: ../src/gui/mainFrame.cpp:486 +#: ../src/gui/mainFrame.cpp:488 msgid "&Plot...\tCtrl+P" msgstr "&Plot...\tCtrl+P" -#: ../src/gui/mainFrame.cpp:486 +#: ../src/gui/mainFrame.cpp:488 msgid "Export Current Plot" msgstr "Aktuellen Plot exportieren" -#: ../src/gui/mainFrame.cpp:487 +#: ../src/gui/mainFrame.cpp:489 msgid "&Image...\tCtrl+I" msgstr "&Bild...\tCtrl+I" -#: ../src/gui/mainFrame.cpp:487 +#: ../src/gui/mainFrame.cpp:489 msgid "Export Current 3D View" msgstr "Aktuelle 3D Ansicht exportieren" -#: ../src/gui/mainFrame.cpp:488 +#: ../src/gui/mainFrame.cpp:490 msgid "Ion&s...\tCtrl+N" msgstr "Ion&en...\tCtrl+N" -#: ../src/gui/mainFrame.cpp:488 +#: ../src/gui/mainFrame.cpp:490 msgid "Export Ion Data" msgstr "Ionendaten exportieren" -#: ../src/gui/mainFrame.cpp:489 +#: ../src/gui/mainFrame.cpp:491 msgid "Ran&ges...\tCtrl+G" msgstr "Ran&ges...\tCtrl+G" -#: ../src/gui/mainFrame.cpp:489 +#: ../src/gui/mainFrame.cpp:491 msgid "Export Range Data" msgstr "Rangedaten exportieren" -#: ../src/gui/mainFrame.cpp:490 +#: ../src/gui/mainFrame.cpp:492 msgid "&Animate Filters...\tCtrl+T" msgstr "" -#: ../src/gui/mainFrame.cpp:490 +#: ../src/gui/mainFrame.cpp:492 msgid "Export Animated Filter" msgstr "" -#: ../src/gui/mainFrame.cpp:491 +#: ../src/gui/mainFrame.cpp:493 msgid "Ani&mate Camera...\tCtrl+M" msgstr "" -#: ../src/gui/mainFrame.cpp:491 +#: ../src/gui/mainFrame.cpp:493 msgid "Export Animated Camera" msgstr "" -#: ../src/gui/mainFrame.cpp:492 +#: ../src/gui/mainFrame.cpp:494 msgid "Pac&kage...\tCtrl+K" msgstr "Pa&ket...\tCtrl+K" -#: ../src/gui/mainFrame.cpp:492 +#: ../src/gui/mainFrame.cpp:494 msgid "Export analysis package" msgstr "Analysepaket exportieren" -#: ../src/gui/mainFrame.cpp:494 +#: ../src/gui/mainFrame.cpp:496 msgid "&Export" msgstr "&Exportieren" -#: ../src/gui/mainFrame.cpp:497 +#: ../src/gui/mainFrame.cpp:499 msgid "&Quit\tCtrl+Q" msgstr "&Beenden\tCtrl+Q" -#: ../src/gui/mainFrame.cpp:497 ../src/gui/mainFrame.cpp:499 +#: ../src/gui/mainFrame.cpp:499 ../src/gui/mainFrame.cpp:501 msgid "Exit Program" msgstr "Programm beenden" -#: ../src/gui/mainFrame.cpp:499 +#: ../src/gui/mainFrame.cpp:501 msgid "E&xit" msgstr "E&xit" -#: ../src/gui/mainFrame.cpp:501 +#: ../src/gui/mainFrame.cpp:503 msgid "&File" msgstr "&Datei" -#: ../src/gui/mainFrame.cpp:505 +#: ../src/gui/mainFrame.cpp:507 msgid "&Background Colour...\tCtrl+B" msgstr "&Hintergrundfarbe...\tCtrl+B" -#: ../src/gui/mainFrame.cpp:505 +#: ../src/gui/mainFrame.cpp:507 msgid "Change background colour" msgstr "Hintergrundfarbe ändern" -#: ../src/gui/mainFrame.cpp:509 +#: ../src/gui/mainFrame.cpp:511 msgid "&Control Pane\tF2" msgstr "&Kontrollfenster\tF2" -#: ../src/gui/mainFrame.cpp:509 ../src/gui/mainFrame.cpp:512 +#: ../src/gui/mainFrame.cpp:511 ../src/gui/mainFrame.cpp:514 msgid "Toggle left control pane" msgstr "Linkes Kontrollfenster ein/aus schalten" -#: ../src/gui/mainFrame.cpp:512 +#: ../src/gui/mainFrame.cpp:514 msgid "&Control Pane\tAlt+C" msgstr "&Kontrollfenster\tAlt+C" -#: ../src/gui/mainFrame.cpp:518 +#: ../src/gui/mainFrame.cpp:520 msgid "&Raw Data Pane\tF3" msgstr "&Rohdatenfenster\tF3" -#: ../src/gui/mainFrame.cpp:518 ../src/gui/mainFrame.cpp:521 +#: ../src/gui/mainFrame.cpp:520 ../src/gui/mainFrame.cpp:523 msgid "Toggle raw data pane (bottom)" msgstr "Rohdatenfenster (unten)" -#: ../src/gui/mainFrame.cpp:521 +#: ../src/gui/mainFrame.cpp:523 msgid "&Raw Data Pane\tAlt+R" msgstr "&Rohdatenfenster\tAlt+R" -#: ../src/gui/mainFrame.cpp:525 +#: ../src/gui/mainFrame.cpp:527 msgid "&Plot List\tF4" msgstr "&Plot Liste\tF4" -#: ../src/gui/mainFrame.cpp:525 ../src/gui/mainFrame.cpp:527 +#: ../src/gui/mainFrame.cpp:527 ../src/gui/mainFrame.cpp:529 msgid "Toggle plot list" msgstr "Plotliste ein/aus schalten" -#: ../src/gui/mainFrame.cpp:527 +#: ../src/gui/mainFrame.cpp:529 msgid "&Plot List\tAlt+P" msgstr "&Plot Liste\tAlt+P" -#: ../src/gui/mainFrame.cpp:533 +#: ../src/gui/mainFrame.cpp:535 msgid "&Legend\tCtrl+L" msgstr "&Legende\tCtrl+L" -#: ../src/gui/mainFrame.cpp:533 +#: ../src/gui/mainFrame.cpp:535 msgid "Toggle Legend display" msgstr "Legende anzeigen ein/aus" -#: ../src/gui/mainFrame.cpp:535 +#: ../src/gui/mainFrame.cpp:537 msgid "P&lot..." msgstr "P&lot..." -#: ../src/gui/mainFrame.cpp:536 +#: ../src/gui/mainFrame.cpp:538 msgid "&Axis\tCtrl+Shift+I" msgstr "&Achsen\tCtrl+Shift+I" -#: ../src/gui/mainFrame.cpp:536 +#: ../src/gui/mainFrame.cpp:538 msgid "Toggle World Axis display" msgstr "Hauptachsen ein/aus schalten" -#: ../src/gui/mainFrame.cpp:541 +#: ../src/gui/mainFrame.cpp:543 msgid "&Fullscreen mode\tF11" msgstr "&Vollbildmodus\tF11" -#: ../src/gui/mainFrame.cpp:541 ../src/gui/mainFrame.cpp:543 +#: ../src/gui/mainFrame.cpp:543 ../src/gui/mainFrame.cpp:545 msgid "Next fullscreen mode: with toolbars" msgstr "Nächster Vollbildmodus: ohne Werkzeugleisten" -#: ../src/gui/mainFrame.cpp:543 +#: ../src/gui/mainFrame.cpp:545 msgid "&Fullscreen mode\tCtrl+Shift+F" msgstr "&Vollbildmodus\tCtrl+Shift+F" -#: ../src/gui/mainFrame.cpp:548 +#: ../src/gui/mainFrame.cpp:550 msgid "&Undo\tCtrl+Z" msgstr "&Zurück\tCtrl+Z" -#: ../src/gui/mainFrame.cpp:550 +#: ../src/gui/mainFrame.cpp:552 msgid "&Redo\tCtrl+Y" msgstr "&Wiederholen\tCtrl+Y" -#: ../src/gui/mainFrame.cpp:553 +#: ../src/gui/mainFrame.cpp:555 msgid "&Range" msgstr "" -#: ../src/gui/mainFrame.cpp:556 +#: ../src/gui/mainFrame.cpp:558 msgid "&Preferences" msgstr "&Voreinstellungen" -#: ../src/gui/mainFrame.cpp:558 +#: ../src/gui/mainFrame.cpp:560 msgid "&Edit" msgstr "&Bearbeiten" -#: ../src/gui/mainFrame.cpp:561 +#: ../src/gui/mainFrame.cpp:563 msgid "&View" msgstr "&Ansicht" -#: ../src/gui/mainFrame.cpp:563 +#: ../src/gui/mainFrame.cpp:565 msgid "&Help...\tCtrl+H" msgstr "&Hilfe...\tCtrl+H" -#: ../src/gui/mainFrame.cpp:563 +#: ../src/gui/mainFrame.cpp:565 msgid "Show help files and documentation" msgstr "Hilfedateien und Dokumentation anzeigen" -#: ../src/gui/mainFrame.cpp:564 +#: ../src/gui/mainFrame.cpp:566 msgid "&Contact..." msgstr "&Kontakt..." -#: ../src/gui/mainFrame.cpp:564 +#: ../src/gui/mainFrame.cpp:566 msgid "Open contact page" msgstr "Kontaktseite öffnen" -#: ../src/gui/mainFrame.cpp:566 +#: ../src/gui/mainFrame.cpp:568 msgid "&About..." msgstr "Über 3Depict..." -#: ../src/gui/mainFrame.cpp:566 +#: ../src/gui/mainFrame.cpp:568 msgid "Information about this program" msgstr "Informationen zu diesem Programm" -#: ../src/gui/mainFrame.cpp:567 +#: ../src/gui/mainFrame.cpp:569 msgid "&Help" msgstr "&Hilfe" -#: ../src/gui/mainFrame.cpp:569 +#: ../src/gui/mainFrame.cpp:571 msgid "Stashed Filters" msgstr "Zwischengelagerte Filter" -#: ../src/gui/mainFrame.cpp:574 +#: ../src/gui/mainFrame.cpp:576 msgid "New Filters" msgstr "" -#: ../src/gui/mainFrame.cpp:604 +#: ../src/gui/mainFrame.cpp:606 msgid "Auto Refresh" msgstr "" "Autom.\n" "aktualisieren" -#: ../src/gui/mainFrame.cpp:610 +#: ../src/gui/mainFrame.cpp:612 msgid "Filter settings" msgstr "Filtereinstellungen" -#: ../src/gui/mainFrame.cpp:613 +#: ../src/gui/mainFrame.cpp:615 msgid "Camera Name" msgstr "Kameraname" -#: ../src/gui/mainFrame.cpp:625 +#: ../src/gui/mainFrame.cpp:627 msgid "Resize to Fit" msgstr "" -#: ../src/gui/mainFrame.cpp:627 +#: ../src/gui/mainFrame.cpp:629 msgid "3D Post-processing" msgstr "3D Nachbearbeitung" -#: ../src/gui/mainFrame.cpp:629 +#: ../src/gui/mainFrame.cpp:631 msgid "Enable Cropping" msgstr "Zuschneiden aktivieren" -#: ../src/gui/mainFrame.cpp:631 ../src/gui/mainFrame.cpp:642 +#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 msgid "x-y" msgstr "x-y" -#: ../src/gui/mainFrame.cpp:632 ../src/gui/mainFrame.cpp:643 +#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 msgid "x-z" msgstr "x-z" -#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 +#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 msgid "y-x" msgstr "y-x" -#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 +#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 msgid "y-z" msgstr "y-z" -#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 +#: ../src/gui/mainFrame.cpp:637 ../src/gui/mainFrame.cpp:648 msgid "z-x" msgstr "z-x" -#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 +#: ../src/gui/mainFrame.cpp:638 ../src/gui/mainFrame.cpp:649 msgid "z-y" msgstr "z-y" -#: ../src/gui/mainFrame.cpp:651 +#: ../src/gui/mainFrame.cpp:653 msgid "Use camera coordinates" msgstr "Verwende Kamerakoordinaten" -#: ../src/gui/mainFrame.cpp:652 +#: ../src/gui/mainFrame.cpp:654 msgid "dX" msgstr "dX" -#: ../src/gui/mainFrame.cpp:654 +#: ../src/gui/mainFrame.cpp:656 msgid "dY" msgstr "dY" -#: ../src/gui/mainFrame.cpp:656 +#: ../src/gui/mainFrame.cpp:658 msgid "dZ" msgstr "dZ" -#: ../src/gui/mainFrame.cpp:658 +#: ../src/gui/mainFrame.cpp:660 msgid "Enable Anaglyphic Stereo" msgstr "Anaglyphic Stereo aktivieren" -#: ../src/gui/mainFrame.cpp:659 +#: ../src/gui/mainFrame.cpp:661 msgid "Flip Channels" msgstr "Kanäle tauschen" -#: ../src/gui/mainFrame.cpp:660 +#: ../src/gui/mainFrame.cpp:662 msgid "Anaglyph Mode" msgstr "Anaglyphmodus" -#: ../src/gui/mainFrame.cpp:662 +#: ../src/gui/mainFrame.cpp:664 msgid "Red-Blue" msgstr "Rot-Blau" -#: ../src/gui/mainFrame.cpp:663 +#: ../src/gui/mainFrame.cpp:665 msgid "Red-Green" msgstr "Rot-Grün" -#: ../src/gui/mainFrame.cpp:664 +#: ../src/gui/mainFrame.cpp:666 msgid "Red-Cyan" msgstr "Rot-Zyan" -#: ../src/gui/mainFrame.cpp:665 +#: ../src/gui/mainFrame.cpp:667 msgid "Green-Magenta" msgstr "Grün-Magenta" -#: ../src/gui/mainFrame.cpp:669 +#: ../src/gui/mainFrame.cpp:671 msgid "Baseline Separation" msgstr "Basislinienabstand" -#: ../src/gui/mainFrame.cpp:671 ../src/backend/filters/annotation.cpp:906 -#: ../src/backend/filters/voxelise.cpp:938 -#: ../src/backend/filters/voxelise.cpp:1106 -#: ../src/backend/filters/profile.cpp:1164 -#: ../src/backend/filters/boundingBox.cpp:731 -#: ../src/backend/filters/dataLoad.cpp:666 -#: ../src/backend/filters/spectrumPlot.cpp:683 +#: ../src/gui/mainFrame.cpp:673 ../src/backend/filters/voxelise.cpp:1150 +#: ../src/backend/filters/voxelise.cpp:1409 +#: ../src/backend/filters/profile.cpp:1168 +#: ../src/backend/filters/boundingBox.cpp:732 +#: ../src/backend/filters/annotation.cpp:914 +#: ../src/backend/filters/dataLoad.cpp:755 +#: ../src/backend/filters/spectrumPlot.cpp:686 msgid "Appearance" msgstr "" -#: ../src/gui/mainFrame.cpp:672 +#: ../src/gui/mainFrame.cpp:674 msgid "Smooth && translucent objects" msgstr "Glatte && durchsichtige Objekte" -#: ../src/gui/mainFrame.cpp:674 +#: ../src/gui/mainFrame.cpp:676 msgid "3D lighting" msgstr "3D Beleuchtung" -#: ../src/gui/mainFrame.cpp:677 +#: ../src/gui/mainFrame.cpp:679 msgid "Performance" msgstr "" -#: ../src/gui/mainFrame.cpp:678 +#: ../src/gui/mainFrame.cpp:680 msgid "Fast and weak randomisation." msgstr "Schnelle aber schwache Randomisierung" -#: ../src/gui/mainFrame.cpp:680 +#: ../src/gui/mainFrame.cpp:682 msgid "Limit Output Pts" msgstr "" -#: ../src/gui/mainFrame.cpp:685 +#: ../src/gui/mainFrame.cpp:687 msgid "Filter caching" msgstr "Filter zwischenspeichern" -#: ../src/gui/mainFrame.cpp:687 +#: ../src/gui/mainFrame.cpp:689 msgid "Max. Ram usage (%)" msgstr "Max. RAM-Nutzung (%)" -#: ../src/gui/mainFrame.cpp:759 +#: ../src/gui/mainFrame.cpp:761 msgid "Warning: Your configuration file appears to be invalid:\n" msgstr "Warnung: Ihre Konfigurationsdatei scheint ungültig zu sein.\n" -#: ../src/gui/mainFrame.cpp:760 +#: ../src/gui/mainFrame.cpp:762 msgid "\tConfig Load: " msgstr "\tConfig Load: " -#: ../src/gui/mainFrame.cpp:1054 +#: ../src/gui/mainFrame.cpp:1060 msgid "Current state has not been saved, would you like to save it now?" msgstr "" -#: ../src/gui/mainFrame.cpp:1055 +#: ../src/gui/mainFrame.cpp:1061 msgid "State changed" msgstr "" -#: ../src/gui/mainFrame.cpp:1073 -msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)" -msgstr "Lesbare Dateien (*.xml, *.pos, *.txt,*.csv,*.ato)" +#: ../src/gui/mainFrame.cpp:1079 +msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)" +msgstr "" -#: ../src/gui/mainFrame.cpp:1075 +#: ../src/gui/mainFrame.cpp:1081 msgid "XML State File (*.xml)" msgstr "" -#: ../src/gui/mainFrame.cpp:1076 +#: ../src/gui/mainFrame.cpp:1082 msgid "POS File (*.pos)" msgstr "" -#: ../src/gui/mainFrame.cpp:1077 +#: ../src/gui/mainFrame.cpp:1083 msgid "LAWATAP ATO File (*.ato)" msgstr "" -#: ../src/gui/mainFrame.cpp:1078 +#: ../src/gui/mainFrame.cpp:1084 msgid "Text File (*.txt, *.csv)" msgstr "" -#: ../src/gui/mainFrame.cpp:1079 +#: ../src/gui/mainFrame.cpp:1085 +msgid "3Dap Files (*.ops)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1086 msgid "All Files (*)" msgstr "" -#: ../src/gui/mainFrame.cpp:1092 ../src/gui/mainFrame.cpp:1141 +#: ../src/gui/mainFrame.cpp:1099 ../src/gui/mainFrame.cpp:1148 msgid "Select Data or State File..." msgstr "Daten oder Statusdatei auswählen..." -#: ../src/gui/mainFrame.cpp:1142 +#: ../src/gui/mainFrame.cpp:1149 msgid "" "3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|" "XML State File (*.xml)|*.xml|All Files (*)|*" @@ -1356,23 +1573,23 @@ "3Depictdateien (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS Datei (*.pos)|*." "pos|XML Status Datei (*.xml)|*.xml|All Files (*)|*" -#: ../src/gui/mainFrame.cpp:1153 +#: ../src/gui/mainFrame.cpp:1160 msgid "Merged file." msgstr "Datei zusammengeführt." -#: ../src/gui/mainFrame.cpp:1256 +#: ../src/gui/mainFrame.cpp:1263 msgid "Tip: You can use ⌘ (command) to merge" msgstr "Tip: Sie können ⌘ (command) zum Zusammenführen verwenden" -#: ../src/gui/mainFrame.cpp:1258 +#: ../src/gui/mainFrame.cpp:1265 msgid "Tip: You can use ctrl to merge" msgstr "Tip: Sie können strg zum Zusammen führen verwenden" -#: ../src/gui/mainFrame.cpp:1292 +#: ../src/gui/mainFrame.cpp:1299 msgid "Load error" msgstr "Fehler beim Laden" -#: ../src/gui/mainFrame.cpp:1293 +#: ../src/gui/mainFrame.cpp:1300 msgid "" "Error loading state file.\n" "See console for more info." @@ -1380,7 +1597,7 @@ "Fehler beim Laden der Statusdatei.\n" "Konsole für mehr Informationen." -#: ../src/gui/mainFrame.cpp:1301 +#: ../src/gui/mainFrame.cpp:1308 msgid "" "This state file contains filters that can be unsafe to run\n" "Do you wish to remove these before continuing?." @@ -1388,24 +1605,24 @@ "Diese Statusdatei enthält Filter deren Anwendung möglicherweise unsicher " "ist. Wollen Sie diese entfernen." -#: ../src/gui/mainFrame.cpp:1302 +#: ../src/gui/mainFrame.cpp:1309 msgid "Security warning" msgstr "Sicherheitswarnung" -#: ../src/gui/mainFrame.cpp:1484 ../src/gui/mainFrame.cpp:1580 -#: ../src/gui/mainFrame.cpp:2010 +#: ../src/gui/mainFrame.cpp:1499 ../src/gui/mainFrame.cpp:1595 +#: ../src/gui/mainFrame.cpp:2029 msgid "Unable to save" msgstr "Speichern nicht möglich" -#: ../src/gui/mainFrame.cpp:1485 +#: ../src/gui/mainFrame.cpp:1500 msgid "No plot available. Please create a plot before exporting." msgstr "Kein Plot vefügbar. Plot muss vor dem Exportieren erzeugt werden." -#: ../src/gui/mainFrame.cpp:1489 +#: ../src/gui/mainFrame.cpp:1504 msgid "Save plot..." msgstr "Plot speichern..." -#: ../src/gui/mainFrame.cpp:1490 +#: ../src/gui/mainFrame.cpp:1505 msgid "" "By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*." "svg|PNG File (*.png)|*.png|All Files (*)|*" @@ -1413,53 +1630,53 @@ "Dateierweiterung (svg,png)|*.svg;*.png|Skalierbare Vektorgrafik (*.svg)|*." "svg|PNG Datei (*.png)|*.png|Alle Dateien (*)|*" -#: ../src/gui/mainFrame.cpp:1544 +#: ../src/gui/mainFrame.cpp:1559 msgid "Select type for save" msgstr "" -#: ../src/gui/mainFrame.cpp:1545 +#: ../src/gui/mainFrame.cpp:1560 msgid "Choose file type" msgstr "" -#: ../src/gui/mainFrame.cpp:1565 ../src/gui/mainFrame.cpp:1622 -#: ../src/gui/mainFrame.cpp:1658 +#: ../src/gui/mainFrame.cpp:1580 ../src/gui/mainFrame.cpp:1637 +#: ../src/gui/mainFrame.cpp:1673 msgid "Choose resolution" msgstr "Auflösung auswählen" -#: ../src/gui/mainFrame.cpp:1581 +#: ../src/gui/mainFrame.cpp:1596 msgid "Unknown file extension. Please use \"svg\" or \"png\"" msgstr "Unbekannte Dateierweiterung. Bitte verwenden Sie \"svg\" oder \"png\"" -#: ../src/gui/mainFrame.cpp:1592 +#: ../src/gui/mainFrame.cpp:1607 msgid "Saved plot: " msgstr "Gespeicherter Plot:" -#: ../src/gui/mainFrame.cpp:1599 ../src/gui/mainFrame.cpp:1651 +#: ../src/gui/mainFrame.cpp:1614 ../src/gui/mainFrame.cpp:1666 msgid "Save Image..." msgstr "Speichere Bild..." -#: ../src/gui/mainFrame.cpp:1600 ../src/gui/mainFrame.cpp:1652 +#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:1667 msgid "PNG File (*.png)|*.png|All Files (*)|*" msgstr "PNG Datei (*.png)|*.png|Alle Dateien (*)|*" -#: ../src/gui/mainFrame.cpp:1614 +#: ../src/gui/mainFrame.cpp:1629 msgid "File already exists. Overwrite?" msgstr "" -#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:2407 -#: ../src/gui/mainFrame.cpp:2513 ../src/gui/mainFrame.cpp:2536 +#: ../src/gui/mainFrame.cpp:1630 ../src/gui/mainFrame.cpp:2425 +#: ../src/gui/mainFrame.cpp:2531 ../src/gui/mainFrame.cpp:2554 msgid "Overwrite?" msgstr "Überschreiben?" -#: ../src/gui/mainFrame.cpp:1642 ../src/gui/mainFrame.cpp:1718 +#: ../src/gui/mainFrame.cpp:1657 ../src/gui/mainFrame.cpp:1733 msgid "Saved 3D View :" msgstr "Gespeicherte 3D Ansicht" -#: ../src/gui/mainFrame.cpp:1672 +#: ../src/gui/mainFrame.cpp:1687 msgid "Program limitation" msgstr "Programmeinschränkung" -#: ../src/gui/mainFrame.cpp:1673 +#: ../src/gui/mainFrame.cpp:1688 msgid "" "Limitation on the screenshot dimension; please ensure that both width and " "height exceed the initial values,\n" @@ -1471,104 +1688,104 @@ "kleiner als die ursprünglichen Werte sind. Sollte Sie dies stören, melden " "Sie bitte einen Bug." -#: ../src/gui/mainFrame.cpp:1690 +#: ../src/gui/mainFrame.cpp:1705 msgid "Number of frames" msgstr "Bilderanzahl" -#: ../src/gui/mainFrame.cpp:1744 +#: ../src/gui/mainFrame.cpp:1759 msgid "Abo&rt" msgstr "" -#: ../src/gui/mainFrame.cpp:1746 +#: ../src/gui/mainFrame.cpp:1761 msgid "&Refresh" msgstr "" -#: ../src/gui/mainFrame.cpp:1855 +#: ../src/gui/mainFrame.cpp:1870 msgid "Cannot animate with no filters." msgstr "" -#: ../src/gui/mainFrame.cpp:1933 +#: ../src/gui/mainFrame.cpp:1952 msgid "Animating" msgstr "" -#: ../src/gui/mainFrame.cpp:1934 +#: ../src/gui/mainFrame.cpp:1953 msgid "Performing refresh" msgstr "" -#: ../src/gui/mainFrame.cpp:1960 +#: ../src/gui/mainFrame.cpp:1979 msgid "Filter property change failed" msgstr "" -#: ../src/gui/mainFrame.cpp:1982 +#: ../src/gui/mainFrame.cpp:2001 msgid "Refresh failed on frame :" msgstr "" -#: ../src/gui/mainFrame.cpp:2011 +#: ../src/gui/mainFrame.cpp:2030 msgid "Image save failed for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:2036 +#: ../src/gui/mainFrame.cpp:2055 msgid "Ion save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:2037 +#: ../src/gui/mainFrame.cpp:2056 msgid "Unable to save ions for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:2068 +#: ../src/gui/mainFrame.cpp:2087 msgid "Plot save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:2069 +#: ../src/gui/mainFrame.cpp:2088 msgid "Unable to save plot or frame " msgstr "" -#: ../src/gui/mainFrame.cpp:2110 +#: ../src/gui/mainFrame.cpp:2129 msgid "Range save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:2111 +#: ../src/gui/mainFrame.cpp:2130 msgid "Unable to save range for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:2140 +#: ../src/gui/mainFrame.cpp:2159 msgid "Voxel save failed" msgstr "" -#: ../src/gui/mainFrame.cpp:2141 +#: ../src/gui/mainFrame.cpp:2160 msgid "Unable to save voxels for frame " msgstr "" -#: ../src/gui/mainFrame.cpp:2170 +#: ../src/gui/mainFrame.cpp:2189 msgid "Animate failed" msgstr "" -#: ../src/gui/mainFrame.cpp:2194 ../src/gui/mainFrame.cpp:2360 -#: ../src/gui/mainFrame.cpp:2468 +#: ../src/gui/mainFrame.cpp:2213 ../src/gui/mainFrame.cpp:2379 +#: ../src/gui/mainFrame.cpp:2486 msgid "No filters means no data to export" msgstr "Keine Filter bedeutet keine Daten zum Exportieren" -#: ../src/gui/mainFrame.cpp:2208 +#: ../src/gui/mainFrame.cpp:2227 msgid "Package name" msgstr "Paketname" -#: ../src/gui/mainFrame.cpp:2209 +#: ../src/gui/mainFrame.cpp:2228 msgid "Package directory name" msgstr "Paketverzeichnis" -#: ../src/gui/mainFrame.cpp:2211 +#: ../src/gui/mainFrame.cpp:2230 msgid "AnalysisPackage" msgstr "Analysepaket" -#: ../src/gui/mainFrame.cpp:2224 +#: ../src/gui/mainFrame.cpp:2243 msgid "Package folder already exists, won't overwrite." msgstr "Paketverzeichnis existiert bereits. Werde es nicht überschreiben." -#: ../src/gui/mainFrame.cpp:2225 +#: ../src/gui/mainFrame.cpp:2244 msgid "Not available" msgstr "Nicht verfügbar" -#: ../src/gui/mainFrame.cpp:2250 +#: ../src/gui/mainFrame.cpp:2269 msgid "" "Package folder creation failed\n" "check writing to this location is possible." @@ -1576,221 +1793,229 @@ "Anlegen des Paketverzeichnisses fehlgeschlagen\n" "Überprüfen Sie ob der angegenbene Ort schreibgeschützt ist." -#: ../src/gui/mainFrame.cpp:2251 +#: ../src/gui/mainFrame.cpp:2270 msgid "Folder creation failed" msgstr "Anlegen des Ordners ist fehlgeschlagen" -#: ../src/gui/mainFrame.cpp:2271 +#: ../src/gui/mainFrame.cpp:2290 msgid "Copying" msgstr "kopiere" -#: ../src/gui/mainFrame.cpp:2272 +#: ../src/gui/mainFrame.cpp:2291 msgid "Copying referenced files" msgstr "Copying referenced files" -#: ../src/gui/mainFrame.cpp:2338 +#: ../src/gui/mainFrame.cpp:2357 msgid "Error copying file" msgstr "Fehler beim Kopieren der Datei" -#: ../src/gui/mainFrame.cpp:2347 +#: ../src/gui/mainFrame.cpp:2366 msgid "Saved package: " msgstr "Gespeicherte Pakete: " -#: ../src/gui/mainFrame.cpp:2371 +#: ../src/gui/mainFrame.cpp:2390 msgid "Export" msgstr "Exportieren" -#: ../src/gui/mainFrame.cpp:2377 +#: ../src/gui/mainFrame.cpp:2396 msgid "" "POS Data (*.pos)|*.pos|Text File (*.txt)|*.txt|VTK Legacy (*.vtk)|*.vtk|All " "Files (*)|*" msgstr "" -#: ../src/gui/mainFrame.cpp:2406 ../src/gui/mainFrame.cpp:2512 +#: ../src/gui/mainFrame.cpp:2424 ../src/gui/mainFrame.cpp:2530 msgid "File already exists, overwrite?" msgstr "Datei existiert bereits. Überschreiben?" -#: ../src/gui/mainFrame.cpp:2447 +#: ../src/gui/mainFrame.cpp:2465 msgid "Saved ions: " msgstr "Gespeicherte Ionen:" -#: ../src/gui/mainFrame.cpp:2472 +#: ../src/gui/mainFrame.cpp:2490 msgid "Export Ranges" msgstr "Range exportieren" -#: ../src/gui/mainFrame.cpp:2494 +#: ../src/gui/mainFrame.cpp:2512 msgid "Save state..." msgstr "Speichere Status..." -#: ../src/gui/mainFrame.cpp:2495 +#: ../src/gui/mainFrame.cpp:2513 msgid "XML state file (*.xml)|*.xml|All Files (*)|*" msgstr "" -#: ../src/gui/mainFrame.cpp:2535 +#: ../src/gui/mainFrame.cpp:2553 msgid "Files have been referred to using relative paths. Keep relative paths?" msgstr "" "Auf Dateien wurde mit relativen Pfaden verwiesen. Relative Pfade beibehalten?" -#: ../src/gui/mainFrame.cpp:2568 +#: ../src/gui/mainFrame.cpp:2586 msgid "Saved state: " msgstr "Gespeicherter Status: " -#: ../src/gui/mainFrame.cpp:2644 +#: ../src/gui/mainFrame.cpp:2662 msgid "Range editor" msgstr "" -#: ../src/gui/mainFrame.cpp:2901 +#: ../src/gui/mainFrame.cpp:2929 msgid "Manual not found locally. Launching web browser" msgstr "Anleitung konnte lokal nicht gefunden werden. Starte Webbrowser" -#: ../src/gui/mainFrame.cpp:2910 +#: ../src/gui/mainFrame.cpp:2938 msgid "Opening contact page in external web browser" msgstr "Öffne Kontaktseite in externem Browser" -#: ../src/gui/mainFrame.cpp:2918 +#: ../src/gui/mainFrame.cpp:2946 msgid "No filter stashes to edit." msgstr "Keine Filterstashes zum Bearbeiten." -#: ../src/gui/mainFrame.cpp:2922 +#: ../src/gui/mainFrame.cpp:2950 msgid "Filter Stashes" msgstr "Filter Stashes" -#: ../src/gui/mainFrame.cpp:2939 +#: ../src/gui/mainFrame.cpp:2967 msgid "Quick and dirty analysis for point data." msgstr "\"Quick and dirty\" Analyse von Punktdaten." -#: ../src/gui/mainFrame.cpp:2949 +#: ../src/gui/mainFrame.cpp:2977 msgid "Compiled with wx Version: " msgstr "Kompiliert mit wx Version: " -#: ../src/gui/mainFrame.cpp:2970 +#: ../src/gui/mainFrame.cpp:2998 msgid "Press enter to store new stash" msgstr "Eingabe drücken um neuen Filterstash zu speichern" -#: ../src/gui/mainFrame.cpp:2976 +#: ../src/gui/mainFrame.cpp:3004 msgid "Press enter to restore stash" msgstr "Eingabe drücken um Stash wiederherzustellen" -#: ../src/gui/mainFrame.cpp:3009 +#: ../src/gui/mainFrame.cpp:3037 msgid "Unable to create stash, selection invalid" msgstr "Stash kann nicht erstellt werden, Auswahl ungültig" -#: ../src/gui/mainFrame.cpp:3016 +#: ../src/gui/mainFrame.cpp:3044 msgid "Created new filter tree stash" msgstr "Neuer Filterstash wurde erzeugt" -#: ../src/gui/mainFrame.cpp:3123 +#: ../src/gui/mainFrame.cpp:3156 msgid "Filter type not a data source - can't be at tree base" msgstr "" -#: ../src/gui/mainFrame.cpp:3263 -msgid "Moving - Hold ⌘ (command) to copy" -msgstr "Verschieben - Halte ⌘ (command) um zu kopieren" - -#: ../src/gui/mainFrame.cpp:3265 -msgid "Moving - Hold control to copy" -msgstr "Verschieben - Halte Strg zum kopieren" +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete\tDel" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete the selected filter" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3351 +msgid "Moving - Hold ⌘ (command) to copy, shift to splice" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3353 +msgid "Moving - Hold control to copy, shift to splice" +msgstr "" -#: ../src/gui/mainFrame.cpp:3604 +#: ../src/gui/mainFrame.cpp:3696 msgid "Press enter to store new camera" msgstr "Eingabe drücken um neue Kamera zu speichern" -#: ../src/gui/mainFrame.cpp:3606 +#: ../src/gui/mainFrame.cpp:3698 msgid "Press enter to restore camera" msgstr "Eingabe drücken um Kamera wiederherzustellen" -#: ../src/gui/mainFrame.cpp:3631 ../src/gui/mainFrame.cpp:3672 +#: ../src/gui/mainFrame.cpp:3723 ../src/gui/mainFrame.cpp:3764 msgid "Restored camera: " msgstr "Wiederhergestellte Kamera: " -#: ../src/gui/mainFrame.cpp:3649 +#: ../src/gui/mainFrame.cpp:3741 msgid "Stored camera: " msgstr "Gespeicherte Kamera: " -#: ../src/gui/mainFrame.cpp:3735 +#: ../src/gui/mainFrame.cpp:3827 msgid "Select an item from the filter tree before choosing a new filter" msgstr "" "Aktivieren Sie zuerst ein Punkt aus dem Filterverlauf bevor Sie einen neuen " "Filter auswählen" -#: ../src/gui/mainFrame.cpp:3737 +#: ../src/gui/mainFrame.cpp:3829 msgid "Load data source (file->open) before choosing a new filter" msgstr "Lade Datenquelle (Datei->öffnen) vor dem Auswählen eines neuen Filters" -#: ../src/gui/mainFrame.cpp:3763 +#: ../src/gui/mainFrame.cpp:3855 msgid "Select RNG File..." msgstr "RNG Datei auswählen..." -#: ../src/gui/mainFrame.cpp:3784 +#: ../src/gui/mainFrame.cpp:3876 msgid "Failed reading range file." msgstr "Fehler beim Lesen der Rangedatei." -#: ../src/gui/mainFrame.cpp:3788 +#: ../src/gui/mainFrame.cpp:3880 msgid "Error loading file" msgstr "Fehler beim Laden der Datei" -#: ../src/gui/mainFrame.cpp:3849 ../src/gui/mainFrame.cpp:3944 -#: ../src/gui/mainFrame.cpp:5449 ../src/gui/mainFrame.cpp:5968 +#: ../src/gui/mainFrame.cpp:3941 ../src/gui/mainFrame.cpp:4042 +#: ../src/gui/mainFrame.cpp:5554 ../src/gui/mainFrame.cpp:6073 msgid "Cons." msgstr "Kons." -#: ../src/gui/mainFrame.cpp:3907 +#: ../src/gui/mainFrame.cpp:4005 msgid "Refresh Aborted." msgstr "Aktualisieren abgebrochen" -#: ../src/gui/mainFrame.cpp:3948 +#: ../src/gui/mainFrame.cpp:4046 msgid "*Cons." msgstr "" -#: ../src/gui/mainFrame.cpp:3950 +#: ../src/gui/mainFrame.cpp:4048 msgid "§Cons." msgstr "§Kons." -#: ../src/gui/mainFrame.cpp:4007 +#: ../src/gui/mainFrame.cpp:4110 msgid "Complete" msgstr "" -#: ../src/gui/mainFrame.cpp:4105 +#: ../src/gui/mainFrame.cpp:4208 msgid "msgs" msgstr "" -#: ../src/gui/mainFrame.cpp:4146 +#: ../src/gui/mainFrame.cpp:4249 msgid "Autosave complete." msgstr "Autosave beendet." -#: ../src/gui/mainFrame.cpp:4350 +#: ../src/gui/mainFrame.cpp:4453 msgid "Aborting...." msgstr "" -#: ../src/gui/mainFrame.cpp:4416 +#: ../src/gui/mainFrame.cpp:4519 msgid "Updated." msgstr "Updated." -#: ../src/gui/mainFrame.cpp:4425 +#: ../src/gui/mainFrame.cpp:4528 msgid "Calculating..." msgstr "" -#: ../src/gui/mainFrame.cpp:4428 -msgid "\\% Done (Esc aborts)" -msgstr "\\% fertig (Esc abbrechen)" - -#: ../src/gui/mainFrame.cpp:4430 -msgid "\\% Done" -msgstr "\\% fertig" +#: ../src/gui/mainFrame.cpp:4531 +msgid "% Done (Esc aborts)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4533 +msgid "% Done" +msgstr "\\% Fertig" -#: ../src/gui/mainFrame.cpp:4704 +#: ../src/gui/mainFrame.cpp:4808 msgid "Tip: You can shift-click to force full refresh, if required" msgstr "Tipp: Verwende shift-click um komplettes Aktualisieren zu erzwingen" -#: ../src/gui/mainFrame.cpp:4766 +#: ../src/gui/mainFrame.cpp:4870 msgid "No data to save" msgstr "Keine Daten zum Sichern" -#: ../src/gui/mainFrame.cpp:4950 +#: ../src/gui/mainFrame.cpp:5052 msgid "Aborting..." msgstr "Abbrechen..." -#: ../src/gui/mainFrame.cpp:4956 +#: ../src/gui/mainFrame.cpp:5058 msgid "" "Waiting for refresh to abort. Exiting could lead to the program " "backgrounding. Exit anyway? " @@ -1798,68 +2023,66 @@ "Waiting for refresh to abort. Exiting could lead to the program " "backgrounding. Exit anyway? " -#: ../src/gui/mainFrame.cpp:4957 ../src/gui/mainFrame.cpp:4977 +#: ../src/gui/mainFrame.cpp:5059 ../src/gui/mainFrame.cpp:5079 msgid "Confirmation request" msgstr "Bestätigungsabfrage" -#: ../src/gui/mainFrame.cpp:4976 +#: ../src/gui/mainFrame.cpp:5078 msgid "Are you sure you wish to exit 3Depict?" msgstr "Sind Sie sicher, dass Sie 3Depict beenden wollen?" -#: ../src/gui/mainFrame.cpp:5314 ../src/gl/cameras.cpp:627 -#: ../src/gl/cameras.cpp:730 -msgid "Orthogonal" -msgstr "Orthogonal" - -#: ../src/gui/mainFrame.cpp:5477 +#: ../src/gui/mainFrame.cpp:5582 msgid "Update Notice: New version " msgstr "Updatenotiz: Neue Version " -#: ../src/gui/mainFrame.cpp:5477 +#: ../src/gui/mainFrame.cpp:5582 msgid " found online." msgstr " online gefunden." -#: ../src/gui/mainFrame.cpp:5481 +#: ../src/gui/mainFrame.cpp:5586 msgid "Online Check: " msgstr "Überprüfe online:" -#: ../src/gui/mainFrame.cpp:5481 +#: ../src/gui/mainFrame.cpp:5586 msgid " is up-to-date." msgstr "ist up-to-date." -#: ../src/gui/mainFrame.cpp:5571 +#: ../src/gui/mainFrame.cpp:5676 msgid "An auto-save state was found, would you like to restore it?." msgstr "Ein auto-save Status wurde gefunden. Wollen Sie ihn wiederherstellen?" -#: ../src/gui/mainFrame.cpp:5572 +#: ../src/gui/mainFrame.cpp:5677 msgid "Autosave" msgstr "Automatisch speichern" -#: ../src/gui/mainFrame.cpp:5579 +#: ../src/gui/mainFrame.cpp:5684 msgid "Unable to load autosave file.." msgstr "Kann Autosavedatei nicht laden.." -#: ../src/gui/mainFrame.cpp:5770 +#: ../src/gui/mainFrame.cpp:5875 msgid "List of available filters" msgstr "Liste der verfügbaren Filter" -#: ../src/gui/mainFrame.cpp:5772 -msgid "Tree - drag to move items, hold ⌘ for copy. Tap delete to remove items" +#: ../src/gui/mainFrame.cpp:5877 +msgid "" +"Tree - drag to move items, hold ⌘ for copy, shift for splice. Tap delete to " +"remove items, multi-click to rename" msgstr "" -#: ../src/gui/mainFrame.cpp:5774 +#: ../src/gui/mainFrame.cpp:5879 msgid "" -"Tree - drag to move items, hold Ctrl for copy. Tap delete to remove items." +"Tree - drag to move items, hold Ctrl for copy, shift for splice. Tap delete " +"to remove items, multi-click to rename." msgstr "" -#: ../src/gui/mainFrame.cpp:5776 +#: ../src/gui/mainFrame.cpp:5881 msgid "" "Enable/Disable automatic updates of data when filter change takes effect" msgstr "" "Ein/Ausschalten vom automatischen Aktualisieren der Daten wenn Änderungen am " "Filter wirksam werden" -#: ../src/gui/mainFrame.cpp:5779 +#: ../src/gui/mainFrame.cpp:5884 msgid "" "Enable/Disable \"Alpha blending\" (transparency) in rendering system. " "Blending is used to smooth objects (avoids artefacts known as \"jaggies\") " @@ -1871,7 +2094,7 @@ "und transparente Oberflächen zu generieren. Ausschalten erlaubt schnelleres " "Renden führt jedoch zu blockigerer Darstellung." -#: ../src/gui/mainFrame.cpp:5780 +#: ../src/gui/mainFrame.cpp:5885 msgid "" "Enable/Disable lighting calculations in rendering, for objects that request " "this. Lighting provides important depth cues for objects comprised of 3D " @@ -1882,7 +2105,7 @@ "umrandete Objekte. Deaktivieren erlaubt u.U. schnelleres Rendern bei " "komplizierten Szenen." -#: ../src/gui/mainFrame.cpp:5781 +#: ../src/gui/mainFrame.cpp:5886 msgid "" "Enable/Disable weak randomisation (Galois linear feedback shift register). " "Strong randomisation uses a much slower random selection method, but " @@ -1894,14 +2117,14 @@ "Auswahlmethode bietet dafür aber einen besseren Schutz gegen unbeabsichtigte " "Korrelationen und wird für die endgültige Analyse empfohlen." -#: ../src/gui/mainFrame.cpp:5783 +#: ../src/gui/mainFrame.cpp:5888 msgid "" "Limit the number of points that can be displayed in the 3D scene. Does not " "affect filter tree calculations. Disabling this can severely reduce " "performance, due to large numbers of points being visible at once." msgstr "" -#: ../src/gui/mainFrame.cpp:5784 +#: ../src/gui/mainFrame.cpp:5889 msgid "" "Enable/Disable caching of intermediate results during filter updates. " "Disabling caching will use less system RAM, though changes to any filter " @@ -1913,30 +2136,30 @@ "bei Änderungen der Filterparameter der ganze Filterbaum neu berechnet wird. " "Dies erhöht den Rechenaufwand deutlich." -#: ../src/gui/mainFrame.cpp:5786 +#: ../src/gui/mainFrame.cpp:5891 msgid "Camera data information" msgstr "Kamerainformation" -#: ../src/gui/mainFrame.cpp:5790 +#: ../src/gui/mainFrame.cpp:5895 msgid "Enable/disable visual effects on final 3D output" msgstr "Ein/Ausschalten von visuellen Effekten in der finalen 3D Ausgabe." -#: ../src/gui/mainFrame.cpp:5792 +#: ../src/gui/mainFrame.cpp:5897 msgid "Enable cropping post-process effect" msgstr "Cropping post-Prozess Effect einschalten" -#: ../src/gui/mainFrame.cpp:5795 +#: ../src/gui/mainFrame.cpp:5900 msgid "" "Colour based 3D effect enable/disable - requires appropriate colour filter " "3D glasses." msgstr "" "Farbbasierte 3D-Effekte ein/ausschalten - erfordert geeignete 3D-Brillen" -#: ../src/gui/mainFrame.cpp:5796 +#: ../src/gui/mainFrame.cpp:5901 msgid "Glasses colour mode" msgstr "Brillenfarbmodus" -#: ../src/gui/mainFrame.cpp:5798 +#: ../src/gui/mainFrame.cpp:5903 msgid "" "Level of separation between left and right images, which sets 3D depth to " "visual distortion tradeoff" @@ -1944,99 +2167,98 @@ "Level of separation between left and right images, which sets 3D depth to " "visual distortion tradeoff" -#: ../src/gui/mainFrame.cpp:5802 +#: ../src/gui/mainFrame.cpp:5907 msgid "X" msgstr "X" -#: ../src/gui/mainFrame.cpp:5803 +#: ../src/gui/mainFrame.cpp:5908 msgid "Y" msgstr "Y" -#: ../src/gui/mainFrame.cpp:5804 +#: ../src/gui/mainFrame.cpp:5909 msgid "Save raw data to file" msgstr "Speichere Rohdaten in Datei" -#: ../src/gui/mainFrame.cpp:5805 +#: ../src/gui/mainFrame.cpp:5910 msgid "Copy raw data to clipboard" msgstr "Kopiere Rohdaten in die Zwischenablage" -#: ../src/gui/mainFrame.cpp:5806 +#: ../src/gui/mainFrame.cpp:5911 msgid "Manage \"stashed\" data." msgstr "" -#: ../src/gui/mainFrame.cpp:5807 +#: ../src/gui/mainFrame.cpp:5912 msgid "Program text output" msgstr "Programm Textausgabe" -#: ../src/gui/mainFrame.cpp:5808 +#: ../src/gui/mainFrame.cpp:5913 msgid "Select active camera, or type to create new named camera" msgstr "" -#: ../src/gui/mainFrame.cpp:5809 +#: ../src/gui/mainFrame.cpp:5914 msgid "Remove the selected camera" msgstr "Ausgewählte Kamera entfernen" -#: ../src/gui/mainFrame.cpp:5810 +#: ../src/gui/mainFrame.cpp:5915 msgid "Perform cropping from coordinate frame of camera" msgstr "" -#: ../src/gui/mainFrame.cpp:5811 +#: ../src/gui/mainFrame.cpp:5916 msgid "" "Set the maximum amount of RAM to use in order to speed repeat computations" msgstr "" -#: ../src/gui/mainFrame.cpp:5812 +#: ../src/gui/mainFrame.cpp:5917 msgid "Collapse the filter tree" msgstr "" -#: ../src/gui/mainFrame.cpp:5813 +#: ../src/gui/mainFrame.cpp:5918 msgid "Expand the filter tree" msgstr "" -#: ../src/gui/mainFrame.cpp:5814 +#: ../src/gui/mainFrame.cpp:5919 msgid "Process the filter tree, hold shift to purge cached filter data" msgstr "" -#: ../src/gui/mainFrame.cpp:5928 +#: ../src/gui/mainFrame.cpp:6033 msgid "Crop" msgstr "Zuschneiden" -#: ../src/gui/mainFrame.cpp:5929 +#: ../src/gui/mainFrame.cpp:6034 msgid "Stereo" msgstr "Stereo" -#: ../src/gui/mainFrame.cpp:5946 -#: ../src/backend/filters/externalProgram.cpp:596 -#: ../src/backend/filters/ionColour.cpp:308 -#: ../src/backend/filters/spectrumPlot.cpp:612 +#: ../src/gui/mainFrame.cpp:6051 ../src/backend/filters/externalProgram.cpp:596 +#: ../src/backend/filters/ionColour.cpp:352 +#: ../src/backend/filters/spectrumPlot.cpp:615 msgid "Data" msgstr "Daten" -#: ../src/gui/mainFrame.cpp:5947 +#: ../src/gui/mainFrame.cpp:6052 msgid "Cam" msgstr "Cam" -#: ../src/gui/mainFrame.cpp:5948 +#: ../src/gui/mainFrame.cpp:6053 msgid "Post" msgstr "Post" -#: ../src/gui/mainFrame.cpp:5949 +#: ../src/gui/mainFrame.cpp:6054 msgid "Tools" msgstr "Werkz." -#: ../src/gui/mainFrame.cpp:5967 +#: ../src/gui/mainFrame.cpp:6072 msgid "Raw" msgstr "Roh" -#: ../src/gui/mainFrame.cpp:6010 +#: ../src/gui/mainFrame.cpp:6115 msgid "Align Camera" msgstr "" -#: ../src/gui/mathglPane.cpp:259 +#: ../src/gui/mathglPane.cpp:264 msgid "No plots selected." msgstr "Kein Plot ausgewählt." -#: ../src/gui/mathglPane.cpp:1201 +#: ../src/gui/mathglPane.cpp:1228 msgid "" "Unable to allocate requested memory.\n" " Try a lower resolution, or save as vector (SVG)." @@ -2044,629 +2266,181 @@ "Kann den notwendigen Speicher nicht zuordnen. Versuche eine geringer " "Auflösung oder speichere als Vektografik (svg)." -#: ../src/gui/mathglPane.cpp:1203 +#: ../src/gui/mathglPane.cpp:1230 msgid "Plotting functions returned an error:\n" msgstr "Plot-Funktion meldete einen Fehler:\n" -#: ../src/gui/mathglPane.cpp:1205 +#: ../src/gui/mathglPane.cpp:1232 msgid "File readback check failed" msgstr "File readback check failed" -#: ../src/gui/mathglPane.cpp:1207 +#: ../src/gui/mathglPane.cpp:1234 msgid "Filesize during readback appears to be zero." msgstr "Filesize during readback appears to be zero." -#: ../src/backend/filter.cpp:55 -msgid "2D Plot" -msgstr "" +#: ../src/3Depict.cpp:399 +msgid "File : " +msgstr "Datei : " -#: ../src/backend/filter.cpp:56 -msgid "Draw" -msgstr "Zeichnen" +#: ../src/3Depict.cpp:399 +msgid " does not exist. Skipping" +msgstr " existiert nicht. Überspringe" -#: ../src/backend/filter.cpp:57 -msgid "Range" -msgstr "Range" +#: ../src/backend/configFile.cpp:187 +msgid "Config file present, but is not valid (root node test)" +msgstr "Konfigurationsdatei vorhanden, aber nicht gültig (root node test)" -#: ../src/backend/filter.cpp:58 -msgid "Voxel" -msgstr "Voxel" +#: ../src/backend/configFile.cpp:228 +msgid "Unable to interpret recent file entry" +msgstr "Kann den letzten Dateieintrag nicht interpretieren" -#: ../src/backend/filter.cpp:192 ../src/backend/filters/ionColour.cpp:411 -msgid "Aborted" -msgstr "Abgebrochen" +#: ../src/backend/configFile.cpp:268 +msgid "Unable to determine filter type in defaults listing." +msgstr "Kann den Filtertyp im Defaultslisting nicht bestimmen." -#: ../src/backend/state.cpp:151 -msgid "" -"This file is a \"state\" file for the 3Depict program, and stores " -"information about a particular analysis session. This file should be a valid " -"\"XML\" file" -msgstr "" -"Diese Datei ist ein \"Status\" Datei für das Programm 3Depict. Sie speichert " -"Informationen über die jeweiligen Analysesitzung. Dies sollte ein gültige " -"\"XML\" Datei sein." - -#: ../src/backend/state.cpp:319 -msgid "Failed to allocate parser" -msgstr "Kann Parser nicht zuordnen" - -#: ../src/backend/state.cpp:354 -msgid "" -"Unable to retrieve root node in input state file... Is this really a non-" -"empty XML file?" -msgstr "" - -#: ../src/backend/state.cpp:361 -msgid "Base state node missing. Is this really a state XML file??" -msgstr "" - -#: ../src/backend/state.cpp:390 -msgid "State was created by a newer version of this program.. " -msgstr "Status wurde von einer neueren Version dieses Programmes erstellt.. " - -#: ../src/backend/state.cpp:391 -msgid "file reading will continue, but may fail." -msgstr "Datei wird weiter eingelesen kann aber unter Umständen fehlschlagen." - -#: ../src/backend/state.cpp:396 -msgid "" -"Warning, unparseable version number in state file. File reading will " -"continue, but may fail" -msgstr "" -"Warnung: Nicht lesbare Versionsnummer in Statusdatei. Datei wird weiter " -"eingelesen kann aber unter Umständen fehlschlagen." - -#: ../src/backend/state.cpp:403 -msgid "Unable to find the \"writer\" node" -msgstr "Kann \"writer\" node nicht finden" - -#: ../src/backend/state.cpp:413 -msgid "Unable to find the \"backcolour\" node." -msgstr "Unable to find the \"backcolour\" node." - -#: ../src/backend/state.cpp:420 -msgid "\"backcolour\" node missing \"r\" value." -msgstr "\"backcolour\" node fehlt \"r\" Wert." - -#: ../src/backend/state.cpp:425 -msgid "Unable to interpret \"backColour\" node's \"r\" value." -msgstr "Kann \"backColour\" node's \"r\" Wert nicht interpretieren." - -#: ../src/backend/state.cpp:433 -msgid "\"backcolour\" node missing \"g\" value." -msgstr "\"backcolour\" node fehlt \"g\" Wert." - -#: ../src/backend/state.cpp:439 -msgid "Unable to interpret \"backColour\" node's \"g\" value." -msgstr "Kann \"backColour\" node's \"g\" Wert nicht interpretieren." - -#: ../src/backend/state.cpp:447 -msgid "\"backcolour\" node missing \"b\" value." -msgstr "\"backcolour\" node fehlt \"b\" Wert." - -#: ../src/backend/state.cpp:453 -msgid "Unable to interpret \"backColour\" node's \"b\" value." -msgstr "Kann \"backColour\" node's \"b\" Wert nicht interpretieren." - -#: ../src/backend/state.cpp:460 -msgid "\"backcolour\"s rgb values must be in range [0,1]" -msgstr "\"backcolour\"s rgb Wert muss im Bereich [0,1] liegen" - -#: ../src/backend/state.cpp:488 -msgid "Unable to find or interpret \"showaxis\" node" -msgstr "Kann \"showaxis\" node nicht interpretieren" - -#: ../src/backend/state.cpp:532 -msgid "Unable to locate \"filtertree\" node." -msgstr "Kann \"filtertree\" node nicht finden." - -#: ../src/backend/state.cpp:548 -msgid "Cameras section missing \"active\" node." -msgstr "Cameras section fehlt \"active\" node." - -#: ../src/backend/state.cpp:556 -msgid "Unable to find property \"value\" for \"cameras->active\" node." -msgstr "Kann \"Eigenschaftswert\" für \"Kamera->aktiv\" Node nicht finden." - -#: ../src/backend/state.cpp:562 -msgid "Unable to interpret property \"value\" for \"cameras->active\" node." -msgstr "" -"Kann \"Eigenschaftswert\" für \"Kamera->aktiv\" Node nicht interpretieren." - -#: ../src/backend/state.cpp:582 -msgid "Failed to interpret camera state for camera : " -msgstr "" - -#: ../src/backend/state.cpp:590 -msgid "Unable to interpret the camera type for camera : " -msgstr "Kann den Kameratype nicht interpretieren für :" - -#: ../src/backend/state.cpp:648 -msgid "Unable to locate stash name for stash " -msgstr "Kann den Stashnamen für Stash nicht finden" - -#: ../src/backend/state.cpp:655 -msgid "Empty stash name for stash " -msgstr "Leerer Stashname für Stash" - -#: ../src/backend/state.cpp:664 -msgid "No filter tree for stash:" -msgstr "" - -#: ../src/backend/state.cpp:670 -msgid "For stash " -msgstr "Für Stash " - -#: ../src/backend/state.cpp:702 -msgid "Unrecognised effect :" -msgstr "Nichterkannter Effekt :" - -#: ../src/backend/state.cpp:712 -msgid "Duplicate effect found" -msgstr "Doppelter Effekt gefunden" - -#: ../src/backend/state.cpp:712 -msgid " cannot use." -msgstr "kann nicht verwenden." - -#: ../src/backend/state.cpp:722 -msgid "Error reading effect : " -msgstr "Fehler beim Lesen:" - -#: ../src/backend/state.cpp:927 -msgid "-merge" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 -#: ../src/backend/APT/APTFileIO.cpp:103 -msgid "Error opening file" -msgstr "Fehler beim Öffnen der Datei" - -#: ../src/backend/APT/APTFileIO.cpp:45 -msgid "Only found header, no data" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:46 -msgid "Unable to reopen file after first scan" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:47 -msgid "Error whilst reading file contents" -msgstr "Fehler beim Lesen des Dateiinhaltes" - -#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 -msgid "Unexpected file format" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:50 -msgid "Insufficient memory to continue" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:54 -msgid "Memory allocation failure on POS load" -msgstr "Speicherzuweisungsfeher beim Laden der pos-Datei" - -#: ../src/backend/APT/APTFileIO.cpp:55 -msgid "Error opening pos file" -msgstr "Fehler beim Öffnen der pos-Datei" - -#: ../src/backend/APT/APTFileIO.cpp:56 -msgid "Pos file empty" -msgstr "Pos-Datei ist leer" - -#: ../src/backend/APT/APTFileIO.cpp:57 -msgid "Pos file size appears to have non-integer number of entries" -msgstr "" -"Pos-Dateigröße scheint eine nicht ganzzahlige Anzahl an Einträgen zu haben" - -#: ../src/backend/APT/APTFileIO.cpp:58 -msgid "Error reading from pos file (after open)" -msgstr "Fehler beim Lesen aus pos-Datei (nach dem öffnen)" - -#: ../src/backend/APT/APTFileIO.cpp:59 -msgid "Error - Found NaN in pos file" -msgstr "Fehler - Fand NaN in pos-Datei" - -#: ../src/backend/APT/APTFileIO.cpp:60 -msgid "Error - Found Inf in pos file" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:61 -msgid "Pos load aborted by interrupt." -msgstr "Pos laden durch Interrupt abgebrochen." - -#: ../src/backend/APT/APTFileIO.cpp:80 -msgid "No numerical data found" -msgstr "Keine numerischen Daten gefunden" - -#: ../src/backend/APT/APTFileIO.cpp:81 -msgid "Error re-opening file, after first scan" -msgstr "Fehler beim nochmaligen Öffnen der Datei nach dem ersten Scan" - -#: ../src/backend/APT/APTFileIO.cpp:82 -msgid "Unable to read file contents after open" -msgstr "Kann den Dateiinhalt nach dem Öffnen nich lesen" - -#: ../src/backend/APT/APTFileIO.cpp:83 -msgid "Error interpreting field in file" -msgstr "Fehler beim Interpretieren eine Feldes in der Datei" - -#: ../src/backend/APT/APTFileIO.cpp:84 -msgid "Incorrect number of fields in file" -msgstr "Die Datei enthält eine falsche Anzahl von Feldern" - -#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 -msgid "Unable to allocate memory to store data" -msgstr "Kann Speicher nicht zuordnen" - -#: ../src/backend/APT/APTFileIO.cpp:104 -msgid "File is empty" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:105 -msgid "Filesize does not match expected format" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:106 -msgid "File version number not <4, as expected" -msgstr "" - -#: ../src/backend/APT/APTFileIO.cpp:108 -msgid "Unable to detect endian-ness in file" -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:48 -msgid "Error opening file, check name and permissions." -msgstr "Fehler beim Öffnen der Datei, überprüfe Namen und Berechtigungen." - -#: ../src/backend/APT/APTRanges.cpp:49 -msgid "" -"Error interpreting range file header, expecting ion count and range count, " -"respectively." -msgstr "" -"Fehler beim Rangedatei interpretieren, erwarte Ionenanzahl bzw. Rangeanzahl." - -#: ../src/backend/APT/APTRanges.cpp:50 -msgid "" -"Range file appears to be empty, check file is a proper range file and is not " -"empty." -msgstr "" -"Rangedatei scheint leer zu sein. Prüfe ob die Datei wirklich ein Rangedatei " -"und nicht leer ist." - -#: ../src/backend/APT/APTRanges.cpp:51 -msgid "Error reading the long name for ion." -msgstr "Fehler beim Lesen des langen Namens für Ion." - -#: ../src/backend/APT/APTRanges.cpp:52 -msgid "Error reading the short name for ion." -msgstr "Fehler beim Lesen des kurzen Namens für Ion." - -#: ../src/backend/APT/APTRanges.cpp:53 -msgid "" -"Error reading colour data in the file, expecting 3 decimal values, space " -"separated." -msgstr "" -"Fehler beim Lesen der Farbinformationen in der Datei. Erwarte 3, durch " -"Leerzeichen getrennte, Dezimalwerte." - -#: ../src/backend/APT/APTRanges.cpp:54 -msgid "" -"Tried skipping to table separator line (line with dashes), but did not find " -"it." -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:55 -msgid "" -"Number of ions in the table header did not match the number specified at the " -"start of the file" -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:56 -msgid "" -"Unexpected failure whilst trying to skip over range lead-in data (bit before " -"range start value)" -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:57 -msgid "" -"Range table had an incorrect number of entries, should be 2 or 3 + number of " -"ranges" -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:58 -msgid "Unable to read range start and end values" -msgstr "Kann Anfangs und Endwert des Range nicht lesen" - -#: ../src/backend/APT/APTRanges.cpp:59 -msgid "Unable to read range table entry" -msgstr "Kann Rangetabelleneintrag nich lesen" - -#: ../src/backend/APT/APTRanges.cpp:60 -msgid "" -"Error reading file, unexpected format, are you sure it is a proper range " -"file?" -msgstr "" -"Fehler beim Lesen der Datei: Unerwartetes Format, sind Sie sicher, dass dies " -"eine korrekte Rangedatei ist?" - -#: ../src/backend/APT/APTRanges.cpp:61 -msgid "" -"Too many ranges appeared to have range entries with no usable data (eg, all " -"blank)" -msgstr "Zu viele Ranges scheinen ungültige Einträge zu haben (z.B. alle leer)" - -#: ../src/backend/APT/APTRanges.cpp:62 -msgid "" -"Range file appears to contain malformed data, check things like start and " -"ends of m/c are not equal or flipped." -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:63 -msgid "Range file appears to be inconsistent (eg, overlapping ranges)" -msgstr "Rangedatei schein inkonsistent zu sein (z.B. überlappende Ranges)" - -#: ../src/backend/APT/APTRanges.cpp:64 -msgid "No ion name mapping found for multiple ion." -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:65 -msgid "Polyatomic extension range matches multiple masses in first section" -msgstr "" - -#: ../src/backend/APT/APTRanges.cpp:66 -msgid "Range file is exceedingly large. Refusing to open" +#: ../src/backend/configFile.cpp:605 +msgid "Online access for non win32/apple platforms is intentionally disabled, " msgstr "" +"Onlinezugang für nicht Win32/apple systeme wurde absichtlich deaktiviert." -#: ../src/backend/APT/APTRanges.cpp:1404 +#: ../src/backend/configFile.cpp:606 msgid "" -"Range headings do not match order of the ions listed in the name " -"specifications. The name specification ordering will be used when reading " -"the range table, as the range heading section is declared as a comment in " -"the file-format specifications, and is not to be intepreted by this program. " -"Check range-species associations actually match what you expect." -msgstr "" - -#: ../src/backend/filters/annotation.cpp:73 -msgid "Arrow" -msgstr "Pfeil" - -#: ../src/backend/filters/annotation.cpp:74 -msgid "Text" -msgstr "Text" - -#: ../src/backend/filters/annotation.cpp:75 -msgid "Arrow+Text" -msgstr "Pfeil+Text" - -#: ../src/backend/filters/annotation.cpp:76 -msgid "Angle" -msgstr "Winkel" - -#: ../src/backend/filters/annotation.cpp:77 -msgid "Ruler" -msgstr "Lineal" - -#: ../src/backend/filters/annotation.cpp:524 -msgid "Enable" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:527 -msgid "Enable/disable annotation" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:548 -msgid "Type or style of annotation" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:564 -#: ../src/backend/filters/annotation.cpp:668 -msgid "Text of annotation" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:568 -#: ../src/backend/filters/ionClip.cpp:529 -#: ../src/backend/filters/ionClip.cpp:551 -#: ../src/backend/filters/ionClip.cpp:573 -#: ../src/backend/filters/ionClip.cpp:610 -#: ../src/backend/filters/transform.cpp:1233 -#: ../src/backend/filters/transform.cpp:1260 -#: ../src/backend/filters/transform.cpp:1286 -#: ../src/backend/filters/profile.cpp:1013 -#: ../src/backend/filters/profile.cpp:1051 -#: ../src/backend/filters/spatialAnalysis.cpp:1041 ../src/gl/cameras.cpp:603 -msgid "Origin" -msgstr "Ursprung" - -#: ../src/backend/filters/annotation.cpp:572 -msgid "Position of annotation" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:576 -#: ../src/backend/filters/annotation.cpp:683 -#: ../src/backend/filters/annotation.cpp:742 -#: ../src/backend/filters/annotation.cpp:831 -msgid "Up dir" -msgstr "Up dir" - -#: ../src/backend/filters/annotation.cpp:580 -#: ../src/backend/filters/annotation.cpp:835 -msgid "Vector for up direction of annotation text" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:584 -#: ../src/backend/filters/annotation.cpp:690 -#: ../src/backend/filters/annotation.cpp:734 -#: ../src/backend/filters/annotation.cpp:839 -msgid "Across dir" -msgstr "Across dir" - -#: ../src/backend/filters/annotation.cpp:588 -#: ../src/backend/filters/annotation.cpp:843 -msgid "Reading direction for annotation" -msgstr "" - -#: ../src/backend/filters/annotation.cpp:593 -#: ../src/backend/filters/annotation.cpp:675 -#: ../src/backend/filters/annotation.cpp:769 -msgid "Text size" -msgstr "Textgröße" - -#: ../src/backend/filters/annotation.cpp:597 -#: ../src/backend/filters/annotation.cpp:679 -#: ../src/backend/filters/annotation.cpp:851 -msgid "Relative size of annotation text" +"regardless of the settings you use here. Use your package manager to keep up-" +"to-date" msgstr "" +"Nutzen Sie Ihren Paketmanager um up-to-date zu sein unabhängig von den " +"Einstellungen die Sie hier verwenden" -#: ../src/backend/filters/annotation.cpp:609 -#: ../src/backend/filters/annotation.cpp:650 -msgid "3D position for tail of arrow" -msgstr "" +#: ../src/backend/plot.cpp:28 ../src/backend/filters/algorithms/mass.cpp:25 +#: ../src/backend/filters/voxelise.cpp:130 +#: ../src/backend/filters/voxelise.cpp:136 +#: ../src/backend/filters/spectrumPlot.cpp:76 +msgid "None" +msgstr "Keiner" -#: ../src/backend/filters/annotation.cpp:617 -#: ../src/backend/filters/annotation.cpp:659 -msgid "3D Position to which arrow points" -msgstr "" +#: ../src/backend/plot.cpp:29 +msgid "Moving avg." +msgstr "Gleit.Durchschn." -#: ../src/backend/filters/annotation.cpp:620 -#: ../src/backend/filters/annotation.cpp:730 -msgid "Positioning" -msgstr "" +#: ../src/backend/plot.cpp:33 +msgid "Lines" +msgstr "Linien" -#: ../src/backend/filters/annotation.cpp:625 -#: ../src/backend/filters/annotation.cpp:697 -msgid "Tip radius" -msgstr "" +#: ../src/backend/plot.cpp:34 +msgid "Bars" +msgstr "Block" -#: ../src/backend/filters/annotation.cpp:629 -msgid "Size of the arrow head" -msgstr "" +#: ../src/backend/plot.cpp:35 +msgid "Steps" +msgstr "Stufen" -#: ../src/backend/filters/annotation.cpp:633 -msgid "Line size" -msgstr "" +#: ../src/backend/plot.cpp:36 +msgid "Stem" +msgstr "Stem" -#: ../src/backend/filters/annotation.cpp:637 -msgid "Thickness of line used to draw arrow stem" -msgstr "" +#: ../src/backend/plot.cpp:37 +msgid "Points" +msgstr "Punkte" -#: ../src/backend/filters/annotation.cpp:671 -msgid "Options" +#: ../src/backend/plot.cpp:39 +msgid "Density" msgstr "" -#: ../src/backend/filters/annotation.cpp:707 -msgid "Position A" -msgstr "Position A" - -#: ../src/backend/filters/annotation.cpp:711 -msgid "Location of first non-central vertex" +#: ../src/backend/plot.cpp:40 +msgid "Scatter" msgstr "" -#: ../src/backend/filters/annotation.cpp:715 -msgid "Origin " -msgstr "Ursprung " - -#: ../src/backend/filters/annotation.cpp:719 -msgid "Location of central vertex" +#: ../src/backend/plot.cpp:746 ../src/backend/plot.cpp:754 +msgid "Multiple data types" msgstr "" -#: ../src/backend/filters/annotation.cpp:723 -msgid "Position B" -msgstr "Position B" - -#: ../src/backend/filters/annotation.cpp:727 -msgid "Location of second non-central vertex" -msgstr "" +#: ../src/backend/plot.cpp:1577 +msgid "error" +msgstr "Fehler" -#: ../src/backend/filters/annotation.cpp:738 -msgid "Reading direction for angle text" +#: ../src/backend/plot.cpp:1818 +msgid "Amplitude" msgstr "" -#: ../src/backend/filters/annotation.cpp:743 -msgid "Vector for up direction of angle text" -msgstr "" +#: ../src/backend/filtertree.cpp:1150 +msgid "WARNING: Skipping node " +msgstr "WARNUNG: Skipping node " -#: ../src/backend/filters/annotation.cpp:751 -msgid "Reflexive" -msgstr "Reflexive" +#: ../src/backend/filtertree.cpp:1150 +msgid " as it was not recognised" +msgstr " wurde nicht erkannt." -#: ../src/backend/filters/annotation.cpp:754 -msgid "Measure interor (enabled) or exterior angle (disabled)" -msgstr "" +#: ../src/backend/filtertree.cpp:1188 +msgid "Error processing node: " +msgstr "Fehler beim Verarbeiten von Node: " -#: ../src/backend/filters/annotation.cpp:759 -msgid "Show Angle" -msgstr "Zeige Winkel" +#: ../src/backend/filters/externalProgram.cpp:259 +msgid "Collate Input" +msgstr "" -#: ../src/backend/filters/annotation.cpp:763 -msgid "Display angle text (when enabled)" +#: ../src/backend/filters/externalProgram.cpp:348 +msgid "Execute" msgstr "" -#: ../src/backend/filters/annotation.cpp:773 -msgid "Size of angle text" +#: ../src/backend/filters/externalProgram.cpp:389 +msgid "Collate output" msgstr "" -#: ../src/backend/filters/annotation.cpp:791 -msgid "Digit format" -msgstr "Zahlenformat" +#: ../src/backend/filters/externalProgram.cpp:564 +#: ../src/backend/filters/externalProgram.cpp:578 +msgid "Command" +msgstr "Befehl" -#: ../src/backend/filters/annotation.cpp:795 +#: ../src/backend/filters/externalProgram.cpp:567 msgid "" -"Format of angle text; # for numeral position, '.' for separator, eg ##.## " -"gives 12.34" +"Full command to send to operating system. See manual for escape sequence " +"meanings" msgstr "" -#: ../src/backend/filters/annotation.cpp:801 -#: ../src/backend/filters/annotation.cpp:886 -msgid "Sphere size" -msgstr "Kugelgröße" +#: ../src/backend/filters/externalProgram.cpp:571 +msgid "Work Dir" +msgstr "Arbeitsverzeichnis" -#: ../src/backend/filters/annotation.cpp:805 -#: ../src/backend/filters/annotation.cpp:890 -msgid "Marker sphere size for manipulating tool" +#: ../src/backend/filters/externalProgram.cpp:574 +msgid "Directory to run the command in" msgstr "" -#: ../src/backend/filters/annotation.cpp:819 -msgid "Ruler beginning 3D location" -msgstr "" +#: ../src/backend/filters/externalProgram.cpp:581 +msgid "Cleanup input" +msgstr "Bereinige Eingabe" -#: ../src/backend/filters/annotation.cpp:827 -msgid "Ruler finish 3D location" +#: ../src/backend/filters/externalProgram.cpp:584 +msgid "Erase input files when command completed" msgstr "" -#: ../src/backend/filters/annotation.cpp:848 -#: ../src/backend/filters/boundingBox.cpp:715 -msgid "Font Size" -msgstr "Schriftgröße" - -#: ../src/backend/filters/annotation.cpp:857 -msgid "Fixed ticks" -msgstr "Fixe Marker" +#: ../src/backend/filters/externalProgram.cpp:589 +msgid "Cache" +msgstr "Zwischenspeicher" -#: ../src/backend/filters/annotation.cpp:860 +#: ../src/backend/filters/externalProgram.cpp:592 msgid "" -"Use fixed (enabled) number of text markers, or one every fixed distance " -"(disabled)" +"Assume program does not alter its output, unless inputs from 3Depict are " +"altered" msgstr "" -#: ../src/backend/filters/annotation.cpp:867 -msgid "Num Ticks" -msgstr "Anzahl Marker" +#: ../src/backend/filters/algorithms/mass.cpp:26 +msgid "Flat TOF" +msgstr "" -#: ../src/backend/filters/annotation.cpp:870 -msgid "Number of tick marks along ruler" +#: ../src/backend/filters/algorithms/mass.cpp:33 +msgid "INsufficient bins to perform fit" msgstr "" -#: ../src/backend/filters/annotation.cpp:877 -msgid "Tick Spacing" -msgstr "Markerabstand" +#: ../src/backend/filters/algorithms/mass.cpp:34 +msgid "Insufficient counts to perform fit" +msgstr "" -#: ../src/backend/filters/annotation.cpp:880 -msgid "Distance between tick marks along ruler" +#: ../src/backend/filters/algorithms/mass.cpp:35 +msgid "Insufficient data to perform fit" msgstr "" -#: ../src/backend/filters/annotation.cpp:904 -msgid "Colour for ruler and ticks" +#: ../src/backend/filters/algorithms/mass.cpp:36 +msgid "Data did not appear to be random noise - cannot fit noise level" msgstr "" #: ../src/backend/filters/ionClip.cpp:65 ../src/backend/filters/profile.cpp:53 @@ -2686,7 +2460,7 @@ msgstr "Ausgerichtete Box" #: ../src/backend/filters/ionClip.cpp:498 -#: ../src/backend/filters/profile.cpp:991 +#: ../src/backend/filters/profile.cpp:995 msgid "Primitive" msgstr "Primitiv" @@ -2695,7 +2469,7 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:507 -#: ../src/backend/filters/profile.cpp:997 +#: ../src/backend/filters/profile.cpp:1001 msgid "Show Primitive" msgstr "Zeige Primitiv" @@ -2714,21 +2488,20 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:532 -#: ../src/backend/filters/profile.cpp:1054 +#: ../src/backend/filters/profile.cpp:1058 msgid "Position for centre of sphere" msgstr "" #: ../src/backend/filters/ionClip.cpp:537 #: ../src/backend/filters/ionClip.cpp:597 -#: ../src/backend/filters/profile.cpp:1037 -#: ../src/backend/filters/profile.cpp:1059 #: ../src/backend/filters/spatialAnalysis.cpp:134 -#: ../src/backend/filters/spatialAnalysis.cpp:1058 +#: ../src/backend/filters/profile.cpp:1041 +#: ../src/backend/filters/profile.cpp:1063 msgid "Radius" msgstr "Radius" #: ../src/backend/filters/ionClip.cpp:540 -#: ../src/backend/filters/profile.cpp:1062 +#: ../src/backend/filters/profile.cpp:1066 msgid "Radius of sphere" msgstr "" @@ -2749,9 +2522,9 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:581 -#: ../src/backend/filters/transform.cpp:1294 -#: ../src/backend/filters/profile.cpp:1021 -#: ../src/backend/filters/spatialAnalysis.cpp:1049 +#: ../src/backend/filters/spatialAnalysis.cpp:947 +#: ../src/backend/filters/profile.cpp:1025 +#: ../src/backend/filters/transform.cpp:1293 msgid "Axis" msgstr "Achse" @@ -2760,7 +2533,7 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:589 -#: ../src/backend/filters/profile.cpp:1029 +#: ../src/backend/filters/profile.cpp:1033 msgid "Lock Axis Mag." msgstr "Achsen Vergr. sperren" @@ -2769,8 +2542,7 @@ msgstr "" #: ../src/backend/filters/ionClip.cpp:600 -#: ../src/backend/filters/profile.cpp:1040 -#: ../src/backend/filters/spatialAnalysis.cpp:1061 +#: ../src/backend/filters/profile.cpp:1044 msgid "Radius of cylinder" msgstr "" @@ -2786,1964 +2558,2101 @@ msgid "Vector to corner of box" msgstr "" -#: ../src/backend/filters/voxelise.cpp:111 -msgid "None (Raw count)" -msgstr "Keine (Roh count)" +#: ../src/backend/filters/clusterAnalysis.cpp:84 +#: ../src/backend/filters/clusterAnalysis.cpp:1060 +msgid "Size Distribution" +msgstr "Größenverteilung" -#: ../src/backend/filters/voxelise.cpp:112 -msgid "Volume (Density)" -msgstr "Volumen (Dichte)" +#: ../src/backend/filters/clusterAnalysis.cpp:85 +msgid "Chemistry Distribution" +msgstr "Chemische Verteilung" -#: ../src/backend/filters/voxelise.cpp:113 -msgid "All Ions (conc)" -msgstr "Alle Ionen (Konz)" +#: ../src/backend/filters/clusterAnalysis.cpp:503 +msgid "No range data. Can't cluster." +msgstr "Keine Rangedaten. Clusteranalyse nicht möglich." -#: ../src/backend/filters/voxelise.cpp:114 -msgid "Ratio (Num/Denom)" -msgstr "Verhältnis (Zähler/Nenner)" +#: ../src/backend/filters/clusterAnalysis.cpp:514 +msgid "" +"No ranges selected for cluster \"core\". Cannot continue with clustering." +msgstr "" +"Kein Range für cluster \"core\" ausgewählt. Kann mit Clusteranalyse nicht " +"weitermachen." -#: ../src/backend/filters/voxelise.cpp:118 -msgid "Point Cloud" -msgstr "Punktwolke" +#: ../src/backend/filters/clusterAnalysis.cpp:523 +msgid "" +"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +msgstr "" +"Kein Range für \"bulk\" ausgewählt. Kann mit Clusteranalyse nicht " +"weitermachen." -#: ../src/backend/filters/voxelise.cpp:119 -msgid "Isosurface" -msgstr "Isosurface" +#: ../src/backend/filters/clusterAnalysis.cpp:689 +msgid "Morphology Plot" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:120 -msgid "Axial slice" +#: ../src/backend/filters/clusterAnalysis.cpp:690 +msgid "\\lambda_1:\\lambda_2 ratio" msgstr "" -#: ../src/backend/filters/voxelise.cpp:124 -#: ../src/backend/filters/voxelise.cpp:130 -#: ../src/backend/filters/algorithms/mass.cpp:25 -#: ../src/backend/filters/spectrumPlot.cpp:76 ../src/backend/plot.cpp:28 -msgid "None" -msgstr "Keiner" +#: ../src/backend/filters/clusterAnalysis.cpp:691 +msgid "\\lambda_2:\\lambda_3 ratio" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:125 -msgid "Gaussian (blur)" +#: ../src/backend/filters/clusterAnalysis.cpp:736 +msgid "No clusters had sufficient dimensionality to compute singular values" msgstr "" -#: ../src/backend/filters/voxelise.cpp:126 -msgid "Lapl. of Gauss. (edges)" +#: ../src/backend/filters/clusterAnalysis.cpp:794 +msgid "Found :" +msgstr "Gefunden:" + +#: ../src/backend/filters/clusterAnalysis.cpp:796 +msgid " clusters" +msgstr " Cluster" + +#: ../src/backend/filters/clusterAnalysis.cpp:888 +msgid "Compositions (fractional, core+bulk)" +msgstr "Zusammensetzungen (fractional, core+bulk)" + +#: ../src/backend/filters/clusterAnalysis.cpp:890 +msgid "Compositions (fractional, core only)" +msgstr "Zusammensetzungen (fractional, core only)" + +#: ../src/backend/filters/clusterAnalysis.cpp:908 +msgid "Frequencies (core+bulk)" +msgstr "Häufigkeiten (core+bulk)" + +#: ../src/backend/filters/clusterAnalysis.cpp:939 +msgid "Core Link + Erode" +msgstr "Core Link + Erode" + +#: ../src/backend/filters/clusterAnalysis.cpp:943 +#: ../src/backend/filters/clusterAnalysis.cpp:951 +#: ../src/backend/filters/spatialAnalysis.cpp:707 +#: ../src/backend/filters/spatialAnalysis.cpp:715 +#: ../src/backend/filters/transform.cpp:1156 +#: ../src/backend/filters/ionInfo.cpp:549 +msgid "Algorithm" +msgstr "Algorithmus" + +#: ../src/backend/filters/clusterAnalysis.cpp:947 +msgid "Cluster algorithm mode" msgstr "" -#: ../src/backend/filters/voxelise.cpp:131 -msgid "Linear" +#: ../src/backend/filters/clusterAnalysis.cpp:958 +msgid "Core Classify" msgstr "" -#: ../src/backend/filters/voxelise.cpp:564 -msgid "Voxel Limits (min,max): (" -msgstr "Voxel Grenzen (min,max): (" +#: ../src/backend/filters/clusterAnalysis.cpp:961 +msgid "" +"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:709 -msgid "Fixed width" -msgstr "Fixe Breite" +#: ../src/backend/filters/clusterAnalysis.cpp:967 +msgid "Core Classify Dist" +msgstr "Core Classify Dist" -#: ../src/backend/filters/voxelise.cpp:713 -msgid "If true, use fixed size voxels, otherwise use fixed count" +#: ../src/backend/filters/clusterAnalysis.cpp:970 +msgid "Restrict only atoms by distance to be cluster sources" msgstr "" -#: ../src/backend/filters/voxelise.cpp:719 -msgid "Bin width x" -msgstr "Bin-Breite x" +#: ../src/backend/filters/clusterAnalysis.cpp:975 +msgid "Classify Knn Max" +msgstr "Classify Knn Max" -#: ../src/backend/filters/voxelise.cpp:723 -msgid "Voxel size in X direction" +#: ../src/backend/filters/clusterAnalysis.cpp:978 +msgid "" +"Require that the kth NN (this number) is within the classify distance, to be " +"a cluster source" msgstr "" -#: ../src/backend/filters/voxelise.cpp:727 -msgid "Bin width y" -msgstr "Bin-Breite y" +#: ../src/backend/filters/clusterAnalysis.cpp:984 +msgid "Core Link Dist" +msgstr "Core Link Dist" -#: ../src/backend/filters/voxelise.cpp:730 -msgid "Voxel size in Y direction" +#: ../src/backend/filters/clusterAnalysis.cpp:987 +msgid "Distance between clusters to allow linking" msgstr "" -#: ../src/backend/filters/voxelise.cpp:736 -msgid "Bin width z" -msgstr "Bin-Breite Z" +#: ../src/backend/filters/clusterAnalysis.cpp:992 +msgid "Bulk Link" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:739 -msgid "Voxel size in Z direction" +#: ../src/backend/filters/clusterAnalysis.cpp:995 +#: ../src/backend/filters/clusterAnalysis.cpp:1012 +msgid "Enable linking of non-cluster species - eg for composition analysis " msgstr "" -#: ../src/backend/filters/voxelise.cpp:746 -msgid "Num bins x" -msgstr "Anzahl Bins x" +#: ../src/backend/filters/clusterAnalysis.cpp:1002 +msgid "Bulk Link (Envelope) Dist" +msgstr "Bulk Link (Envelope) Dist" -#: ../src/backend/filters/voxelise.cpp:750 -msgid "Number of voxels to use in X direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1005 +msgid "" +"Distance from core points that form cluster that is used to grab surrounding " +"bulk points" msgstr "" -#: ../src/backend/filters/voxelise.cpp:755 -msgid "Num bins y" -msgstr "Anzahl Bins y" +#: ../src/backend/filters/clusterAnalysis.cpp:1009 +msgid "Erosion" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:758 -msgid "Number of voxels to use in Y direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1018 +msgid "Erode Dist" +msgstr "Erode Dist" + +#: ../src/backend/filters/clusterAnalysis.cpp:1021 +msgid "" +"Distance from unclustered material in which bulk points are eroded from " +"cluster" msgstr "" -#: ../src/backend/filters/voxelise.cpp:764 -msgid "Num bins z" -msgstr "Anzahl Bins z" +#: ../src/backend/filters/clusterAnalysis.cpp:1028 +msgid "Clustering Params" +msgstr "Cluster Parameter" -#: ../src/backend/filters/voxelise.cpp:766 -msgid "Number of voxels to use in Z direction" +#: ../src/backend/filters/clusterAnalysis.cpp:1033 +msgid "Size Cropping" +msgstr "Größeneinschrankungen" + +#: ../src/backend/filters/clusterAnalysis.cpp:1036 +msgid "Remove clusters based upon size distribution" msgstr "" -#: ../src/backend/filters/voxelise.cpp:796 -msgid "Normalise by" -msgstr "Normalisieren mit" +#: ../src/backend/filters/clusterAnalysis.cpp:1043 +msgid "Min Size" +msgstr "Min Größe" -#: ../src/backend/filters/voxelise.cpp:799 -msgid "Method to use to normalise scalar value in each voxel" +#: ../src/backend/filters/clusterAnalysis.cpp:1046 +msgid "Remove clusters below this size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1051 +msgid "Max Size" +msgstr "Max Größe" + +#: ../src/backend/filters/clusterAnalysis.cpp:1054 +msgid "Remove clusters above this size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:802 -msgid "Computation" +#: ../src/backend/filters/clusterAnalysis.cpp:1063 +msgid "Show number of clusters as a function of cluster size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:809 -#: ../src/backend/filters/spatialAnalysis.cpp:1233 -#: ../src/backend/filters/spatialAnalysis.cpp:1254 -msgid "Numerator" -msgstr "Zähler" +#: ../src/backend/filters/clusterAnalysis.cpp:1069 +msgid "Log Scale" +msgstr "Log. Skala" -#: ../src/backend/filters/voxelise.cpp:812 -msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" +#: ../src/backend/filters/clusterAnalysis.cpp:1072 +msgid "Use logarithmic scale for size distribution" msgstr "" -#: ../src/backend/filters/voxelise.cpp:829 -msgid "Enable this ion for numerator" +#: ../src/backend/filters/clusterAnalysis.cpp:1079 +msgid "Morphology Dist." msgstr "" -#: ../src/backend/filters/voxelise.cpp:841 -#: ../src/backend/filters/voxelise.cpp:862 -#: ../src/backend/filters/spatialAnalysis.cpp:1261 -#: ../src/backend/filters/spatialAnalysis.cpp:1280 -msgid "Denominator" -msgstr "Nenner" +#: ../src/backend/filters/clusterAnalysis.cpp:1082 +msgid "Create a plot showing cluster aspect ratio" +msgstr "" -#: ../src/backend/filters/voxelise.cpp:844 -msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" +#: ../src/backend/filters/clusterAnalysis.cpp:1088 +msgid "Cluster Id" msgstr "" -#: ../src/backend/filters/voxelise.cpp:858 -msgid "Enable this ion for denominator contribution" +#: ../src/backend/filters/clusterAnalysis.cpp:1091 +msgid "Assign cluster output a unique per-cluster value (id)." msgstr "" -#: ../src/backend/filters/voxelise.cpp:880 -#: ../src/backend/filters/voxelise.cpp:911 -msgid "Filtering" -msgstr "Filtern" +#: ../src/backend/filters/clusterAnalysis.cpp:1098 +msgid "Chemistry Dist." +msgstr "Chemistry Dist." -#: ../src/backend/filters/voxelise.cpp:884 -msgid "Smoothing method to use on voxels" +#: ../src/backend/filters/clusterAnalysis.cpp:1101 +msgid "Create a plot showing chemistry for each cluster size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:887 -msgid "Processing" +#: ../src/backend/filters/clusterAnalysis.cpp:1108 +#: ../src/backend/filters/spatialAnalysis.cpp:1006 +#: ../src/backend/filters/profile.cpp:1111 +#: ../src/backend/filters/ionInfo.cpp:465 +msgid "Normalise" +msgstr "Normalisieren" + +#: ../src/backend/filters/clusterAnalysis.cpp:1111 +msgid "Convert cluster counts to composition" msgstr "" -#: ../src/backend/filters/voxelise.cpp:893 -msgid "Standard Dev" +#: ../src/backend/filters/clusterAnalysis.cpp:1117 +msgid "Postprocess" +msgstr "Postprozess" + +#: ../src/backend/filters/clusterAnalysis.cpp:1136 +msgid "If selected, use as \"core\" ion type (can make clusters)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:897 -msgid "Filtering Scale" +#: ../src/backend/filters/clusterAnalysis.cpp:1141 +msgid "Core Ranges" +msgstr "Core Ranges" + +#: ../src/backend/filters/clusterAnalysis.cpp:1147 +msgid "Enable/Disable All" msgstr "" -#: ../src/backend/filters/voxelise.cpp:903 -msgid "Kernel Size" +#: ../src/backend/filters/clusterAnalysis.cpp:1151 +msgid "Enable/disable all ions" msgstr "" -#: ../src/backend/filters/voxelise.cpp:907 +#: ../src/backend/filters/clusterAnalysis.cpp:1164 msgid "" -"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" +"If selected, use as \"bulk\" ion type (can be included in existing clusters)" msgstr "" -#: ../src/backend/filters/voxelise.cpp:927 -msgid "Representation" -msgstr "Representation" +#: ../src/backend/filters/clusterAnalysis.cpp:1169 +msgid "Bulk Ranges" +msgstr "Bulk Ranges" -#: ../src/backend/filters/voxelise.cpp:930 -msgid "3D display method" -msgstr "" +#: ../src/backend/filters/clusterAnalysis.cpp:1185 +msgid "Max. Sep + Erode" +msgstr "Max. Sep + Erode" -#: ../src/backend/filters/voxelise.cpp:941 -msgid "Spot size" -msgstr "Spot size" +#: ../src/backend/filters/clusterAnalysis.cpp:1938 +msgid " --------------------------- Parameter selection notice ------------- " +msgstr " --------------------------- Parameterauswahl Notiz ------------- " -#: ../src/backend/filters/voxelise.cpp:944 -msgid "Size of the spots to use for display" +#: ../src/backend/filters/clusterAnalysis.cpp:1939 +msgid "You have specified a bulk distance larger than half your link distance." msgstr "" -#: ../src/backend/filters/voxelise.cpp:949 -#: ../src/backend/filters/voxelise.cpp:984 -#: ../src/backend/filters/voxelise.cpp:1056 -msgid "Transparency" -msgstr "Transparenz" +#: ../src/backend/filters/clusterAnalysis.cpp:1940 +msgid "" +"You can do this; thats OK, but the output is no longer independent of the " +"computational process;" +msgstr "" +"Sie könne das machen, das ist in Ordnung, aber die Ausgabe ist nicht länger " +"unabhängig vom Berechnungsprozess" -#: ../src/backend/filters/voxelise.cpp:952 -msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" +#: ../src/backend/filters/clusterAnalysis.cpp:1941 +msgid "" +"This will be a problem in the case where two or more clusters can equally " +"lay claim to a \"bulk\" ion. " msgstr "" +"Dies ist ein Problem wenn zwei oder mehrere Cluster auf dasselbe \"bulk\" " +"Ion Anspruch erheben. " -#: ../src/backend/filters/voxelise.cpp:961 -msgid "Surf. param." +#: ../src/backend/filters/clusterAnalysis.cpp:1942 +msgid "" +" If your inter-cluster distance is sufficiently large (larger than your bulk " +"linking distance), then you can get away with this." msgstr "" +" If your inter-cluster distance is sufficiently large (larger than your bulk " +"linking distance), then you can get away with this." -#: ../src/backend/filters/voxelise.cpp:964 -msgid "Isovalue" -msgstr "Isovalue" +#: ../src/backend/filters/clusterAnalysis.cpp:1943 +msgid "" +" In theory it is possible to \"join\" the clusters, but this has not been " +"implemented for speed reasons." +msgstr "" +"Theoretisch ist es möglich die Cluster zu 'verbinden', dies wurde jedoch aus " +"Gescheindigkeitsgründen nicht implementiert." -#: ../src/backend/filters/voxelise.cpp:967 -msgid "Scalar value to show as isosurface" +#: ../src/backend/filters/clusterAnalysis.cpp:1944 +msgid "" +"If you want this, please contact the author, or just use the source to add " +"this in yourself." msgstr "" +"Sollten Sie dies wollen, kontaktieren Sie den Autor oder verwenden Sie den " +"Sourcecode um es selbst hinzuzufügen." -#: ../src/backend/filters/voxelise.cpp:972 -#: ../src/backend/filters/voxelise.cpp:1037 -#: ../src/backend/filters/spatialAnalysis.cpp:2344 -#: ../src/backend/filters/spatialAnalysis.cpp:2397 -msgid "Surface" -msgstr "Oberfläche" +#: ../src/backend/filters/clusterAnalysis.cpp:1945 +msgid "---------------------------------------------------------------------- " +msgstr "---------------------------------------------------------------------- " -#: ../src/backend/filters/voxelise.cpp:979 -msgid "Colour of isosurface" -msgstr "" +#: ../src/backend/filters/clusterAnalysis.cpp:1955 +#: ../src/backend/filters/spatialAnalysis.cpp:476 +#: ../src/backend/filters/spatialAnalysis.cpp:2166 +#: ../src/backend/filters/spatialAnalysis.cpp:2595 +#: ../src/backend/filters/spatialAnalysis.cpp:2887 +#: ../src/backend/filters/spatialAnalysis.cpp:3188 +#: ../src/backend/filters/spatialAnalysis.cpp:3334 +#: ../src/backend/filters/spatialAnalysis.cpp:3597 +#: ../src/backend/filters/spatialAnalysis.cpp:3810 +#: ../src/backend/filters/transform.cpp:1015 +msgid "Collate" +msgstr "Abgleichen" -#: ../src/backend/filters/voxelise.cpp:987 -#: ../src/backend/filters/voxelise.cpp:1059 -msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" +#: ../src/backend/filters/clusterAnalysis.cpp:1974 +msgid "Build Core" msgstr "" -#: ../src/backend/filters/voxelise.cpp:998 -msgid "Slice param." -msgstr "" +#: ../src/backend/filters/clusterAnalysis.cpp:2002 +msgid "Core" +msgstr "Kern" -#: ../src/backend/filters/voxelise.cpp:1006 -msgid "Slice Axis" +#: ../src/backend/filters/clusterAnalysis.cpp:2125 +msgid "Bulk" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1009 -msgid "Normal for the planar slice" +#: ../src/backend/filters/clusterAnalysis.cpp:2203 +msgid "Erode" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1016 -msgid "Slice Coord" +#: ../src/backend/filters/clusterAnalysis.cpp:2281 +msgid "Re-Collate" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1019 -msgid "Fractional coordinate that slice plane passes through" +#: ../src/backend/filters/clusterAnalysis.cpp:2336 +msgid "Classify Core" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1024 -msgid "Interp. Mode" +#: ../src/backend/filters/clusterAnalysis.cpp:2427 +msgid "Build Bulk" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1032 -msgid "Interpolation mode for direction normal to slice" +#: ../src/backend/filters/clusterAnalysis.cpp:2675 +#: ../src/backend/filters/clusterAnalysis.cpp:2878 +msgid "Cluster Size" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1048 -msgid "Colour mode" +#: ../src/backend/filters/clusterAnalysis.cpp:2676 +#: ../src/backend/filters/clusterAnalysis.cpp:2882 +msgid "Frequency" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1051 -#: ../src/backend/filters/ionColour.cpp:261 -msgid "Colour scheme used to assign points colours by value" +#: ../src/backend/filters/clusterAnalysis.cpp:2880 +msgid "Composition" msgstr "" -#: ../src/backend/filters/voxelise.cpp:1064 -#: ../src/backend/filters/ionColour.cpp:273 -msgid "Show Bar" -msgstr "Zeige Balken" +#: ../src/backend/filters/voxelise.cpp:116 +msgid "None (Raw count)" +msgstr "Keine (Roh count)" -#: ../src/backend/filters/voxelise.cpp:1071 -msgid "Auto Bounds" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:117 +msgid "Volume (Density)" +msgstr "Volumen (Dichte)" -#: ../src/backend/filters/voxelise.cpp:1072 -msgid "Auto-compute min/max values in map" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:118 +msgid "All Ions (conc)" +msgstr "Alle Ionen (Konz)" -#: ../src/backend/filters/voxelise.cpp:1082 -#: ../src/backend/filters/ionColour.cpp:294 -msgid "Map start" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:119 +msgid "Ratio (Num/Denom)" +msgstr "Verhältnis (Zähler/Nenner)" -#: ../src/backend/filters/voxelise.cpp:1083 -#: ../src/backend/filters/ionColour.cpp:295 -msgid "Assign points with this value to the first colour in map" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:123 +msgid "Point Cloud" +msgstr "Punktwolke" -#: ../src/backend/filters/voxelise.cpp:1090 -#: ../src/backend/filters/ionColour.cpp:302 -msgid "Map end" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:124 +msgid "Isosurface" +msgstr "Isosurface" -#: ../src/backend/filters/voxelise.cpp:1091 -#: ../src/backend/filters/ionColour.cpp:303 -msgid "Assign points with this value to the last colour in map" +#: ../src/backend/filters/voxelise.cpp:125 +msgid "Axial slice" msgstr "" -#: ../src/backend/filters/transform.cpp:84 -msgid "Translate" -msgstr "Translate" - -#: ../src/backend/filters/transform.cpp:85 -msgid "Scale (isotropic)" +#: ../src/backend/filters/voxelise.cpp:126 +msgid "Slice" msgstr "" -#: ../src/backend/filters/transform.cpp:86 -msgid "Scale (anisotropic)" +#: ../src/backend/filters/voxelise.cpp:131 +msgid "Gaussian (blur)" msgstr "" -#: ../src/backend/filters/transform.cpp:87 -msgid "Rotate" -msgstr "Rotieren" +#: ../src/backend/filters/voxelise.cpp:132 +msgid "Lapl. of Gauss. (edges)" +msgstr "" -#: ../src/backend/filters/transform.cpp:88 -msgid "Value Shuffle" +#: ../src/backend/filters/voxelise.cpp:137 +msgid "Linear" msgstr "" -#: ../src/backend/filters/transform.cpp:89 -msgid "Spatial Noise" +#: ../src/backend/filters/voxelise.cpp:404 +msgid "Counting" msgstr "" -#: ../src/backend/filters/transform.cpp:90 -msgid "Translate Value" -msgstr "Translate Wert" +#: ../src/backend/filters/voxelise.cpp:579 +msgid "Gauss Smooth" +msgstr "" -#: ../src/backend/filters/transform.cpp:91 -msgid "Crop Value" +#: ../src/backend/filters/voxelise.cpp:585 +msgid "Calc. Laplace" msgstr "" -#: ../src/backend/filters/transform.cpp:95 -msgid "Specify" -msgstr "Angeben" +#: ../src/backend/filters/voxelise.cpp:609 +msgid "Voxel Limits (min,max): (" +msgstr "Voxel Grenzen (min,max): (" -#: ../src/backend/filters/transform.cpp:96 -msgid "Boundbox Centre" -msgstr "Boundbox Zentrum" +#: ../src/backend/filters/voxelise.cpp:619 +#: ../src/backend/filters/voxelise.cpp:1139 +msgid "Representation" +msgstr "Representation" -#: ../src/backend/filters/transform.cpp:97 -msgid "Mass Centre" -msgstr "Massen-Zentrum" +#: ../src/backend/filters/voxelise.cpp:924 +msgid "Fixed width" +msgstr "Fixe Breite" -#: ../src/backend/filters/transform.cpp:1008 -#: ../src/backend/filters/clusterAnalysis.cpp:1956 -#: ../src/backend/filters/spatialAnalysis.cpp:635 -#: ../src/backend/filters/spatialAnalysis.cpp:2298 -#: ../src/backend/filters/spatialAnalysis.cpp:2727 -#: ../src/backend/filters/spatialAnalysis.cpp:3016 -#: ../src/backend/filters/spatialAnalysis.cpp:3689 -#: ../src/backend/filters/spatialAnalysis.cpp:3952 -#: ../src/backend/filters/spatialAnalysis.cpp:4165 -msgid "Collate" -msgstr "Abgleichen" +#: ../src/backend/filters/voxelise.cpp:928 +msgid "If true, use fixed size voxels, otherwise use fixed count" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:934 +msgid "Bin width x" +msgstr "Bin-Breite x" -#: ../src/backend/filters/transform.cpp:1027 -msgid "Mass-to-Charge (Da/e)" +#: ../src/backend/filters/voxelise.cpp:938 +msgid "Voxel size in X direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1081 -msgid "Shuffle" +#: ../src/backend/filters/voxelise.cpp:942 +msgid "Bin width y" +msgstr "Bin-Breite y" + +#: ../src/backend/filters/voxelise.cpp:945 +msgid "Voxel size in Y direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1105 -msgid "Splice" +#: ../src/backend/filters/voxelise.cpp:951 +msgid "Bin width z" +msgstr "Bin-Breite Z" + +#: ../src/backend/filters/voxelise.cpp:954 +msgid "Voxel size in Z direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1153 -msgid "Algorithm to use to transform point data" +#: ../src/backend/filters/voxelise.cpp:961 +msgid "Num bins x" +msgstr "Anzahl Bins x" + +#: ../src/backend/filters/voxelise.cpp:965 +msgid "Number of voxels to use in X direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1157 -#: ../src/backend/filters/ionInfo.cpp:546 -#: ../src/backend/filters/clusterAnalysis.cpp:943 -#: ../src/backend/filters/clusterAnalysis.cpp:951 -#: ../src/backend/filters/spatialAnalysis.cpp:800 -#: ../src/backend/filters/spatialAnalysis.cpp:808 -msgid "Algorithm" -msgstr "Algorithmus" +#: ../src/backend/filters/voxelise.cpp:970 +msgid "Num bins y" +msgstr "Anzahl Bins y" -#: ../src/backend/filters/transform.cpp:1170 -msgid "Origin mode" +#: ../src/backend/filters/voxelise.cpp:973 +msgid "Number of voxels to use in Y direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1173 -msgid "Select how transform origin is computed" +#: ../src/backend/filters/voxelise.cpp:979 +msgid "Num bins z" +msgstr "Anzahl Bins z" + +#: ../src/backend/filters/voxelise.cpp:981 +msgid "Number of voxels to use in Z direction" msgstr "" -#: ../src/backend/filters/transform.cpp:1178 -msgid "Show marker" -msgstr "Zeige Markierung" +#: ../src/backend/filters/voxelise.cpp:1011 +msgid "Normalise by" +msgstr "Normalisieren mit" -#: ../src/backend/filters/transform.cpp:1182 -msgid "Display an interactive object to set transform origin" +#: ../src/backend/filters/voxelise.cpp:1014 +msgid "Method to use to normalise scalar value in each voxel" msgstr "" -#: ../src/backend/filters/transform.cpp:1184 -msgid "Display a small marker to denote transform origin" +#: ../src/backend/filters/voxelise.cpp:1017 +msgid "Computation" msgstr "" -#: ../src/backend/filters/transform.cpp:1200 -msgid "Translation" -msgstr "Translation" +#: ../src/backend/filters/voxelise.cpp:1024 +#: ../src/backend/filters/spatialAnalysis.cpp:1122 +#: ../src/backend/filters/spatialAnalysis.cpp:1143 +msgid "Numerator" +msgstr "Zähler" -#: ../src/backend/filters/transform.cpp:1203 -msgid "Translation vector for transform" +#: ../src/backend/filters/voxelise.cpp:1027 +msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" msgstr "" -#: ../src/backend/filters/transform.cpp:1215 -msgid "Offset" +#: ../src/backend/filters/voxelise.cpp:1044 +msgid "Enable this ion for numerator" msgstr "" -#: ../src/backend/filters/transform.cpp:1219 -msgid "Scalar to use to offset each point's associated value" +#: ../src/backend/filters/voxelise.cpp:1056 +#: ../src/backend/filters/voxelise.cpp:1077 +#: ../src/backend/filters/spatialAnalysis.cpp:1150 +#: ../src/backend/filters/spatialAnalysis.cpp:1169 +msgid "Denominator" +msgstr "Nenner" + +#: ../src/backend/filters/voxelise.cpp:1059 +msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" msgstr "" -#: ../src/backend/filters/transform.cpp:1236 -#: ../src/backend/filters/transform.cpp:1263 -msgid "Origin of scale trasnform" +#: ../src/backend/filters/voxelise.cpp:1073 +msgid "Enable this ion for denominator contribution" msgstr "" -#: ../src/backend/filters/transform.cpp:1243 -#: ../src/backend/filters/transform.cpp:1270 -msgid "Scale Fact." -msgstr "Skalierungsfaktor" +#: ../src/backend/filters/voxelise.cpp:1095 +#: ../src/backend/filters/voxelise.cpp:1126 +msgid "Filtering" +msgstr "Filtern" -#: ../src/backend/filters/transform.cpp:1246 -#: ../src/backend/filters/transform.cpp:1273 -msgid "Enlargement factor for scaling around origin" +#: ../src/backend/filters/voxelise.cpp:1099 +msgid "Smoothing method to use on voxels" msgstr "" -#: ../src/backend/filters/transform.cpp:1289 -msgid "Origin of rotation" +#: ../src/backend/filters/voxelise.cpp:1102 +msgid "Processing" msgstr "" -#: ../src/backend/filters/transform.cpp:1297 -msgid "Axis around which to revolve" +#: ../src/backend/filters/voxelise.cpp:1108 +msgid "Standard Dev" msgstr "" -#: ../src/backend/filters/transform.cpp:1302 -msgid "Angle (deg)" -msgstr "Winkel (deg)" - -#: ../src/backend/filters/transform.cpp:1305 -msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" +#: ../src/backend/filters/voxelise.cpp:1112 +msgid "Filtering Scale" msgstr "" -#: ../src/backend/filters/transform.cpp:1322 -msgid "Noise Type" +#: ../src/backend/filters/voxelise.cpp:1118 +msgid "Kernel Size" msgstr "" -#: ../src/backend/filters/transform.cpp:1325 -msgid "Method to use to degrade point data" +#: ../src/backend/filters/voxelise.cpp:1122 +msgid "" +"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" msgstr "" -#: ../src/backend/filters/transform.cpp:1332 -msgid "Noise level" +#: ../src/backend/filters/voxelise.cpp:1142 +msgid "3D display method" msgstr "" -#: ../src/backend/filters/transform.cpp:1334 -msgid "Standard dev." -msgstr "Standardabweichung" +#: ../src/backend/filters/voxelise.cpp:1153 +msgid "Spot size" +msgstr "Spot size" -#: ../src/backend/filters/transform.cpp:1342 -msgid "Amplitude of noise" +#: ../src/backend/filters/voxelise.cpp:1156 +msgid "Size of the spots to use for display" msgstr "" -#: ../src/backend/filters/transform.cpp:1356 -msgid "Min Value" -msgstr "" +#: ../src/backend/filters/voxelise.cpp:1161 +#: ../src/backend/filters/voxelise.cpp:1196 +#: ../src/backend/filters/voxelise.cpp:1268 +#: ../src/backend/filters/voxelise.cpp:1358 +msgid "Transparency" +msgstr "Transparenz" -#: ../src/backend/filters/transform.cpp:1360 -msgid "Minimum value to use for crop" +#: ../src/backend/filters/voxelise.cpp:1164 +msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" msgstr "" -#: ../src/backend/filters/transform.cpp:1364 -msgid "Max Value" +#: ../src/backend/filters/voxelise.cpp:1173 +msgid "Surf. param." msgstr "" -#: ../src/backend/filters/transform.cpp:1368 -msgid "Maximum value to use for crop" +#: ../src/backend/filters/voxelise.cpp:1176 +msgid "Isovalue" +msgstr "Isovalue" + +#: ../src/backend/filters/voxelise.cpp:1179 +msgid "Scalar value to show as isosurface" msgstr "" -#: ../src/backend/filters/transform.cpp:1377 -msgid "Transform Params" -msgstr "Transformationsparameter" +#: ../src/backend/filters/voxelise.cpp:1184 +#: ../src/backend/filters/voxelise.cpp:1249 +#: ../src/backend/filters/voxelise.cpp:1338 +#: ../src/backend/filters/spatialAnalysis.cpp:2212 +#: ../src/backend/filters/spatialAnalysis.cpp:2265 +msgid "Surface" +msgstr "Oberfläche" -#: ../src/backend/filters/transform.cpp:1738 -msgid "White" +#: ../src/backend/filters/voxelise.cpp:1191 +msgid "Colour of isosurface" msgstr "" -#: ../src/backend/filters/transform.cpp:1740 -msgid "Gaussian" +#: ../src/backend/filters/voxelise.cpp:1199 +#: ../src/backend/filters/voxelise.cpp:1271 +#: ../src/backend/filters/voxelise.cpp:1361 +msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:259 -msgid "Collate Input" +#: ../src/backend/filters/voxelise.cpp:1210 +#: ../src/backend/filters/voxelise.cpp:1317 +msgid "Slice param." msgstr "" -#: ../src/backend/filters/externalProgram.cpp:348 -msgid "Execute" +#: ../src/backend/filters/voxelise.cpp:1218 +msgid "Slice Axis" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:389 -msgid "Collate output" +#: ../src/backend/filters/voxelise.cpp:1221 +msgid "Normal for the planar slice" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:564 -#: ../src/backend/filters/externalProgram.cpp:578 -msgid "Command" -msgstr "Befehl" +#: ../src/backend/filters/voxelise.cpp:1228 +msgid "Slice Coord" +msgstr "" -#: ../src/backend/filters/externalProgram.cpp:567 -msgid "" -"Full command to send to operating system. See manual for escape sequence " -"meanings" +#: ../src/backend/filters/voxelise.cpp:1231 +msgid "Fractional coordinate that slice plane passes through" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:571 -msgid "Work Dir" -msgstr "Arbeitsverzeichnis" +#: ../src/backend/filters/voxelise.cpp:1236 +msgid "Interp. Mode" +msgstr "" -#: ../src/backend/filters/externalProgram.cpp:574 -msgid "Directory to run the command in" +#: ../src/backend/filters/voxelise.cpp:1244 +msgid "Interpolation mode for direction normal to slice" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:581 -msgid "Cleanup input" -msgstr "Bereinige Eingabe" +#: ../src/backend/filters/voxelise.cpp:1260 +#: ../src/backend/filters/voxelise.cpp:1350 +msgid "Colour mode" +msgstr "" -#: ../src/backend/filters/externalProgram.cpp:584 -msgid "Erase input files when command completed" +#: ../src/backend/filters/voxelise.cpp:1263 +#: ../src/backend/filters/voxelise.cpp:1353 +#: ../src/backend/filters/ionColour.cpp:293 +msgid "Colour scheme used to assign points colours by value" msgstr "" -#: ../src/backend/filters/externalProgram.cpp:589 -msgid "Cache" -msgstr "Zwischenspeicher" +#: ../src/backend/filters/voxelise.cpp:1276 +#: ../src/backend/filters/voxelise.cpp:1366 +#: ../src/backend/filters/ionColour.cpp:305 +msgid "Show Bar" +msgstr "Zeige Balken" -#: ../src/backend/filters/externalProgram.cpp:592 -msgid "" -"Assume program does not alter its output, unless inputs from 3Depict are " -"altered" +#: ../src/backend/filters/voxelise.cpp:1279 +msgid "Display colour bar in 3D view?" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:26 -msgid "Flat TOF" +#: ../src/backend/filters/voxelise.cpp:1284 +#: ../src/backend/filters/voxelise.cpp:1373 +msgid "Auto Bounds" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:33 -msgid "INsufficient bins to perform fit" +#: ../src/backend/filters/voxelise.cpp:1285 +#: ../src/backend/filters/voxelise.cpp:1374 +msgid "Auto-compute min/max values in map" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:34 -msgid "Insufficient counts to perform fit" +#: ../src/backend/filters/voxelise.cpp:1295 +#: ../src/backend/filters/voxelise.cpp:1384 +#: ../src/backend/filters/ionColour.cpp:337 +msgid "Map start" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:35 -msgid "Insufficient data to perform fit" +#: ../src/backend/filters/voxelise.cpp:1296 +#: ../src/backend/filters/voxelise.cpp:1385 +#: ../src/backend/filters/ionColour.cpp:338 +msgid "Assign points with this value to the first colour in map" msgstr "" -#: ../src/backend/filters/algorithms/mass.cpp:36 -msgid "Data did not appear to be random noise - cannot fit noise level" +#: ../src/backend/filters/voxelise.cpp:1303 +#: ../src/backend/filters/voxelise.cpp:1392 +#: ../src/backend/filters/ionColour.cpp:345 +msgid "Map end" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:37 -msgid "Rectilinear" -msgstr "Geradlinig" - -#: ../src/backend/filters/ionInfo.cpp:38 -msgid "Convex hull" -msgstr "Konvexe Hülle" - -#: ../src/backend/filters/ionInfo.cpp:200 -msgid "No ions" +#: ../src/backend/filters/voxelise.cpp:1304 +#: ../src/backend/filters/voxelise.cpp:1393 +#: ../src/backend/filters/ionColour.cpp:346 +msgid "Assign points with this value to the last colour in map" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:226 -#: ../src/backend/filters/spectrumPlot.cpp:432 -msgid "" -"Background fit failed - input data was considered ill formed (gauss-test)" +#: ../src/backend/filters/voxelise.cpp:1320 +msgid "Slice Offset" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:227 -msgid "Following data has not been corrected" +#: ../src/backend/filters/voxelise.cpp:1323 +msgid "Point on plane for slice, in 0->1 coordinates" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:279 -msgid "--Counts--" -msgstr "- Anzahl -" - -#: ../src/backend/filters/ionInfo.cpp:289 -msgid "Total Ranged\t" -msgstr "Gesamt ranged\t" - -#: ../src/backend/filters/ionInfo.cpp:294 -msgid "Total (incl. unranged)\t" -msgstr "Total (inkl. nicht geranged)" - -#: ../src/backend/filters/ionInfo.cpp:307 -msgid "n/a" +#: ../src/backend/filters/voxelise.cpp:1330 +msgid "Slice Normal" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:317 -#: ../src/backend/filters/ionDownsample.cpp:496 -msgid "Unranged" -msgstr "Nicht Geranged" - -#: ../src/backend/filters/ionInfo.cpp:330 -msgid "Number of points : " -msgstr "Anzahl der Punkte: " - -#: ../src/backend/filters/ionInfo.cpp:359 -msgid "Rectilinear Bounds : " -msgstr "Geradlinige Grenzen:" +#: ../src/backend/filters/voxelise.cpp:1333 +msgid "Normal vector for slice" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:364 -msgid "Volume (len^3): " -msgstr "Volumen (Läng.^3)" +#: ../src/backend/filters/ionColour.cpp:289 +msgid "Colour Map" +msgstr "Farbtabelle" -#: ../src/backend/filters/ionInfo.cpp:381 -msgid "Convex Volume (len^3): " -msgstr "Konvexes Volumen (Läng.^3)" +#: ../src/backend/filters/ionColour.cpp:297 +msgid "Reverse map" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:384 -msgid "Unable to compute volume" -msgstr "Kann Volumen nicht berechnen" +#: ../src/backend/filters/ionColour.cpp:298 +msgid "Reverse the colour scale" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:413 -msgid "Ranged Density (pts/vol):" -msgstr "Ranged Dichte (pts / vol):" +#: ../src/backend/filters/ionColour.cpp:306 +msgid "Display the colour legend in the 3D view" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:418 -msgid "Total Density (pts/vol):" -msgstr "Gesamtdichte (pts / vol):" +#: ../src/backend/filters/ionColour.cpp:312 +msgid "Opacity" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:445 -msgid "Compositions" -msgstr "Zusammensetzungen" +#: ../src/backend/filters/ionColour.cpp:313 +msgid "How see-through to make the legend (0- transparent, 1- solid)" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:446 -msgid "Display compositional data for points in console" +#: ../src/backend/filters/ionColour.cpp:320 +msgid "Num Colours" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:450 -msgid "Counts" -msgstr "Anzahl" +#: ../src/backend/filters/ionColour.cpp:322 +msgid "Number of unique colours to use in colour map" +msgstr "" -#: ../src/backend/filters/ionInfo.cpp:451 -msgid "Display count data for points in console" +#: ../src/backend/filters/ionColour.cpp:327 +msgid "Auto bounds" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:458 -msgid "Ion data" +#: ../src/backend/filters/ionColour.cpp:329 +msgid "Automatically scale colour to min/max of data range" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:462 -#: ../src/backend/filters/profile.cpp:1107 -#: ../src/backend/filters/clusterAnalysis.cpp:1108 -#: ../src/backend/filters/spatialAnalysis.cpp:1116 -msgid "Normalise" -msgstr "Normalisieren" +#: ../src/backend/filters/ionColour.cpp:460 ../src/backend/filter.cpp:197 +msgid "Aborted" +msgstr "Abgebrochen" -#: ../src/backend/filters/ionInfo.cpp:466 -msgid "Normalise count data" +#: ../src/backend/filters/spatialAnalysis.cpp:123 +msgid "Local Density" +msgstr "Lokale Dichte" + +#: ../src/backend/filters/spatialAnalysis.cpp:124 +msgid "Density Filtering" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:530 -msgid "Volume" -msgstr "Volumen" +#: ../src/backend/filters/spatialAnalysis.cpp:125 +msgid "Radial Distribution" +msgstr "Radial Distribution" -#: ../src/backend/filters/ionInfo.cpp:533 -msgid "Compute volume for point data" +#: ../src/backend/filters/spatialAnalysis.cpp:126 +msgid "Axial Distribution" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:549 -msgid "Select volume counting technique" +#: ../src/backend/filters/spatialAnalysis.cpp:127 +msgid "Binomial Distribution" msgstr "" -#: ../src/backend/filters/ionInfo.cpp:562 -msgid "Volume data" +#: ../src/backend/filters/spatialAnalysis.cpp:128 +msgid "Point Em/Replacement" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:120 -#: ../src/backend/filters/rangeFile.h:96 -msgid "Ranging" -msgstr "Ranging" +#: ../src/backend/filters/spatialAnalysis.cpp:129 +msgid "Local Chemistry" +msgstr "" -#: ../src/backend/filters/rangeFile.cpp:560 -#: ../src/backend/filters/rangeFile.cpp:580 -#: ../src/backend/filters/dataLoad.cpp:484 -#: ../src/backend/filters/dataLoad.cpp:505 -msgid "File" -msgstr "Datei" +#: ../src/backend/filters/spatialAnalysis.cpp:133 +msgid "Neighbour Count" +msgstr "" -#: ../src/backend/filters/rangeFile.cpp:563 -msgid "File to use for range data" +#: ../src/backend/filters/spatialAnalysis.cpp:484 +msgid "Load" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:573 -msgid "Drop unranged" -msgstr "Nicht gerangete ausschalten" +#: ../src/backend/filters/spatialAnalysis.cpp:539 +#: ../src/backend/filters/spatialAnalysis.cpp:2198 +#: ../src/backend/filters/spatialAnalysis.cpp:2251 +#: ../src/backend/filters/spatialAnalysis.cpp:2601 +#: ../src/backend/filters/spatialAnalysis.cpp:2893 +#: ../src/backend/filters/spatialAnalysis.cpp:3200 +#: ../src/backend/filters/spatialAnalysis.cpp:3829 +msgid "Build" +msgstr "" -#: ../src/backend/filters/rangeFile.cpp:575 -msgid "Remove unranged points when generating output" +#: ../src/backend/filters/spatialAnalysis.cpp:588 +#: ../src/backend/filters/spatialAnalysis.cpp:3222 +#: ../src/backend/filters/spatialAnalysis.cpp:3718 +#: ../src/backend/filters/spatialAnalysis.cpp:3846 +msgid "Compute" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:585 -msgid "Legend" +#: ../src/backend/filters/spatialAnalysis.cpp:710 +msgid "Spatial analysis algorithm to use" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:587 -msgid "Display colour legend for enabled ions" +#: ../src/backend/filters/spatialAnalysis.cpp:734 +#: ../src/backend/filters/spatialAnalysis.cpp:785 +msgid "Stop Mode" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:591 -msgid "View" +#: ../src/backend/filters/spatialAnalysis.cpp:737 +msgid "Method to use to terminate algorithm when examining each point" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:607 -msgid "All Ions" -msgstr "Alle Ionen" +#: ../src/backend/filters/spatialAnalysis.cpp:744 +msgid "NN Max" +msgstr "NN Max" -#: ../src/backend/filters/rangeFile.cpp:608 -msgid "Enable/disable all ions at once" +#: ../src/backend/filters/spatialAnalysis.cpp:747 +msgid "Maximum number of neighbours to examine" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:616 -msgid "Species" +#: ../src/backend/filters/spatialAnalysis.cpp:754 +msgid "Normalise bins" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:623 -msgid "IonID " -msgstr "IonID " - -#: ../src/backend/filters/rangeFile.cpp:624 -msgid "Enable/disable specified ion" +#: ../src/backend/filters/spatialAnalysis.cpp:757 +msgid "" +"Normalise counts by binwidth. Needed when comparing NN histograms against " +"one another" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:634 -msgid "Active Ion " -msgstr "Actives Ion " +#: ../src/backend/filters/spatialAnalysis.cpp:763 +msgid "Show Random" +msgstr "" -#: ../src/backend/filters/rangeFile.cpp:636 -msgid "If true, ion is used in output" +#: ../src/backend/filters/spatialAnalysis.cpp:766 +msgid "Show a fitted (density matched) theoretical distribution" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:646 -msgid "Colour " -msgstr "Farbe" +#: ../src/backend/filters/spatialAnalysis.cpp:777 +msgid "Dist Max" +msgstr "Abst. Max." -#: ../src/backend/filters/rangeFile.cpp:650 -msgid "Colour used to represent ion" +#: ../src/backend/filters/spatialAnalysis.cpp:780 +msgid "Maximum distance from each point for search" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:673 -msgid "All Ranges" -msgstr "Alle Range" +#: ../src/backend/filters/spatialAnalysis.cpp:794 +#: ../src/backend/filters/spatialAnalysis.cpp:928 +#: ../src/backend/filters/profile.cpp:1089 +msgid "Num Bins" +msgstr "Bin-Anz." -#: ../src/backend/filters/rangeFile.cpp:674 -msgid "Enable/disable all ranges" +#: ../src/backend/filters/spatialAnalysis.cpp:797 +#: ../src/backend/filters/spatialAnalysis.cpp:931 +msgid "Number of bins for output 1D RDF plot" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:689 -msgid "Active Rng " -msgstr "Activer Rng " +#: ../src/backend/filters/spatialAnalysis.cpp:803 +msgid "Surface Remove" +msgstr "" -#: ../src/backend/filters/rangeFile.cpp:692 +#: ../src/backend/filters/spatialAnalysis.cpp:806 msgid "" -"Enable/disable specified range (ion must also be enabled to activiate range)" +"Exclude surface as part of source to minimise bias in RDF (at cost of " +"increased noise)" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:696 -msgid "Ion " -msgstr "Ion " - -#: ../src/backend/filters/rangeFile.cpp:699 -msgid "Name of ion associate to this range" +#: ../src/backend/filters/spatialAnalysis.cpp:813 +msgid "Remove Dist" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:708 -msgid "Start rng " -msgstr "Start rng " - -#: ../src/backend/filters/rangeFile.cpp:711 -msgid "Start value for range" +#: ../src/backend/filters/spatialAnalysis.cpp:816 +msgid "Minimum distance to remove from surface" msgstr "" -#: ../src/backend/filters/rangeFile.cpp:716 -msgid "End rng " -msgstr "End rng " +#: ../src/backend/filters/spatialAnalysis.cpp:824 +#: ../src/backend/filters/spatialAnalysis.cpp:936 +msgid "Plot colour " +msgstr "Plotfarbe " -#: ../src/backend/filters/rangeFile.cpp:719 -msgid "Stopping value for range`" +#: ../src/backend/filters/spatialAnalysis.cpp:827 +#: ../src/backend/filters/spatialAnalysis.cpp:939 +msgid "Colour of output plot" msgstr "" -#: ../src/backend/filters/profile.cpp:51 -msgid "Cylinder (axial)" +#: ../src/backend/filters/spatialAnalysis.cpp:831 +#: ../src/backend/filters/spatialAnalysis.cpp:917 +#: ../src/backend/filters/spatialAnalysis.cpp:922 +#: ../src/backend/filters/spatialAnalysis.cpp:954 +#: ../src/backend/filters/spatialAnalysis.cpp:993 +msgid "Alg. Params." msgstr "" -#: ../src/backend/filters/profile.cpp:52 -msgid "Cylinder (radial)" -msgstr "" +#: ../src/backend/filters/spatialAnalysis.cpp:844 +#: ../src/backend/filters/spatialAnalysis.cpp:1096 +msgid "Source" +msgstr "Quelle" -#: ../src/backend/filters/profile.cpp:591 -msgid "Distance" -msgstr "Abstand" +#: ../src/backend/filters/spatialAnalysis.cpp:847 +msgid "Ions to use for initiating RDF search" +msgstr "" -#: ../src/backend/filters/profile.cpp:599 -msgid "Fraction" -msgstr "Anteil" +#: ../src/backend/filters/spatialAnalysis.cpp:860 +#: ../src/backend/filters/spatialAnalysis.cpp:1112 +#: ../src/backend/filters/spatialAnalysis.cpp:1138 +msgid "Enable/disable ion as source" +msgstr "" -#: ../src/backend/filters/profile.cpp:601 -msgid "Density (\\frac{\\#}{len^3})" -msgstr "Dichte (\\frac{\\#}{len^3})" +#: ../src/backend/filters/spatialAnalysis.cpp:865 +#: ../src/backend/filters/spatialAnalysis.cpp:1117 +msgid "Source Ion" +msgstr "" -#: ../src/backend/filters/profile.cpp:628 -msgid "Freq. Profile" -msgstr "Häufigkeitsprofil" +#: ../src/backend/filters/spatialAnalysis.cpp:875 +#: ../src/backend/filters/spatialAnalysis.cpp:1153 +msgid "Enable/disable all ions as target" +msgstr "" -#: ../src/backend/filters/profile.cpp:680 -msgid "No data remained in profile - cannot display result" +#: ../src/backend/filters/spatialAnalysis.cpp:887 +#: ../src/backend/filters/spatialAnalysis.cpp:1165 +msgid "Enable/disable this ion as target" msgstr "" -#: ../src/backend/filters/profile.cpp:967 -msgid "Total Density" +#: ../src/backend/filters/spatialAnalysis.cpp:891 +msgid "Target Ion" msgstr "" -#: ../src/backend/filters/profile.cpp:971 -msgid "Do not do per-species analysis, perform density computation only" +#: ../src/backend/filters/spatialAnalysis.cpp:901 +msgid "Cutoff" msgstr "" -#: ../src/backend/filters/profile.cpp:985 -msgid "Primitive type" +#: ../src/backend/filters/spatialAnalysis.cpp:904 +msgid "Remove points with local density above/below this value" msgstr "" -#: ../src/backend/filters/profile.cpp:989 -msgid "Basic shape to use for profile" +#: ../src/backend/filters/spatialAnalysis.cpp:910 +msgid "Retain Upper" msgstr "" -#: ../src/backend/filters/profile.cpp:1001 -msgid "Display the 3D composition profile interaction object" +#: ../src/backend/filters/spatialAnalysis.cpp:913 +msgid "Retain either points with density above (enabled) or below cutoff" msgstr "" -#: ../src/backend/filters/profile.cpp:1016 -#: ../src/backend/filters/spatialAnalysis.cpp:1044 -msgid "Position for centre of cylinder" +#: ../src/backend/filters/spatialAnalysis.cpp:950 +msgid "Vector along which to calculate distribution function" msgstr "" -#: ../src/backend/filters/profile.cpp:1024 -msgid "Vector between ends of cylinder" +#: ../src/backend/filters/spatialAnalysis.cpp:961 +msgid "Block size" msgstr "" -#: ../src/backend/filters/profile.cpp:1032 -msgid "Prevent length of cylinder changing during interaction" +#: ../src/backend/filters/spatialAnalysis.cpp:964 +msgid "Number of ions to use per block" msgstr "" -#: ../src/backend/filters/profile.cpp:1075 -msgid "Fixed Bin Num" -msgstr "Fix. Bin-Anz." +#: ../src/backend/filters/spatialAnalysis.cpp:971 +msgid "Max Block Aspect" +msgstr "" -#: ../src/backend/filters/profile.cpp:1078 +#: ../src/backend/filters/spatialAnalysis.cpp:974 msgid "" -"If true, use a fixed number of bins for profile, otherwise use fixed step " -"size" +"Maximum allowable block aspect ratio. Blocks above this aspect are " +"discarded. Setting too high decreases correlation strength. Too low causes " +"loss of statistical power." msgstr "" -#: ../src/backend/filters/profile.cpp:1085 -#: ../src/backend/filters/spatialAnalysis.cpp:887 -#: ../src/backend/filters/spatialAnalysis.cpp:1021 -msgid "Num Bins" -msgstr "Bin-Anz." +#: ../src/backend/filters/spatialAnalysis.cpp:985 +msgid "Extrusion Direction" +msgstr "" -#: ../src/backend/filters/profile.cpp:1090 -msgid "Number of bins to use for profile" +#: ../src/backend/filters/spatialAnalysis.cpp:988 +msgid "Direction in which blocks are extended during construction." msgstr "" -#: ../src/backend/filters/profile.cpp:1096 -#: ../src/backend/filters/spectrumPlot.cpp:580 -msgid "Bin width" -msgstr "Bin-Breite" +#: ../src/backend/filters/spatialAnalysis.cpp:997 +msgid "Plot Counts" +msgstr "" -#: ../src/backend/filters/profile.cpp:1102 -msgid "Size of each bin in profile" +#: ../src/backend/filters/spatialAnalysis.cpp:1000 +msgid "Show the counts in the binomial histogram" msgstr "" -#: ../src/backend/filters/profile.cpp:1111 -msgid "Convert bin counts into relative frequencies in each bin" +#: ../src/backend/filters/spatialAnalysis.cpp:1009 +msgid "" +"Normalise the counts in the binomial histogram to a probability density " +"function" msgstr "" -#: ../src/backend/filters/profile.cpp:1115 -msgid "Min. events" +#: ../src/backend/filters/spatialAnalysis.cpp:1013 +msgid "Expected Freq" msgstr "" -#: ../src/backend/filters/profile.cpp:1119 -msgid "Drop data that does not have this many events" +#: ../src/backend/filters/spatialAnalysis.cpp:1016 +msgid "" +"Show the theoretically expected probability density function for a random " +"dataset with the same mean" msgstr "" -#: ../src/backend/filters/profile.cpp:1122 -msgid "Settings" +#: ../src/backend/filters/spatialAnalysis.cpp:1024 +msgid "Display Grid" msgstr "" -#: ../src/backend/filters/profile.cpp:1144 -#: ../src/backend/filters/spectrumPlot.cpp:669 -msgid "Plot Type" -msgstr "Plot Type" +#: ../src/backend/filters/spatialAnalysis.cpp:1027 +msgid "Show the extruded grid in the 3D view. This may be slow" +msgstr "" -#: ../src/backend/filters/profile.cpp:1147 -msgid "Visual style for plot" +#: ../src/backend/filters/spatialAnalysis.cpp:1031 +msgid "View Options" msgstr "" -#: ../src/backend/filters/profile.cpp:1158 -msgid "Colour of plot" +#: ../src/backend/filters/spatialAnalysis.cpp:1037 +msgid "Data File" msgstr "" -#: ../src/backend/filters/profile.cpp:1174 -msgid "Err. Estimator" -msgstr "Fehlerschätzer" +#: ../src/backend/filters/spatialAnalysis.cpp:1041 +msgid "Pos file of points to subtract/replace/etc" +msgstr "" -#: ../src/backend/filters/profile.cpp:1177 -msgid "Method of estimating error associated with each bin" +#: ../src/backend/filters/spatialAnalysis.cpp:1046 +msgid "Match Tol." msgstr "" -#: ../src/backend/filters/profile.cpp:1184 -msgid "Avg. Window" +#: ../src/backend/filters/spatialAnalysis.cpp:1049 +msgid "Tolerance to allow for matching" msgstr "" -#: ../src/backend/filters/profile.cpp:1187 -msgid "Number of bins to include in moving average filter" +#: ../src/backend/filters/spatialAnalysis.cpp:1065 +msgid "Replacment condition" msgstr "" -#: ../src/backend/filters/profile.cpp:1191 -msgid "Error analysis" +#: ../src/backend/filters/spatialAnalysis.cpp:1071 +msgid "Replace value" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:64 -msgid "Box only" +#: ../src/backend/filters/spatialAnalysis.cpp:1074 +msgid "Use value data from file when replacing ions" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:65 -msgid "Tick" +#: ../src/backend/filters/spatialAnalysis.cpp:1079 +msgid "Replacement" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:66 -msgid "Dimension" +#: ../src/backend/filters/spatialAnalysis.cpp:1099 +msgid "Enable/disable all ions as source" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:571 -msgid "If true, show box, otherwise hide box" +#: ../src/backend/filters/spatialAnalysis.cpp:1125 +msgid "Ions to use as Numerator for conc. calculation" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:584 -msgid "Style" +#: ../src/backend/filters/spatialAnalysis.cpp:1681 +msgid "Spatial analysis aborted by user" +msgstr "Spatial analysis aborted by user" + +#: ../src/backend/filters/spatialAnalysis.cpp:1682 +msgid "Insufficient memory for binomial. Reduce input size?" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:587 -msgid "Box display mode" +#: ../src/backend/filters/spatialAnalysis.cpp:1683 +msgid "Required range data not present" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:590 -msgid "Display mode" +#: ../src/backend/filters/spatialAnalysis.cpp:1684 +msgid "Unable to generate usable binomial grid" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:599 -msgid "Fixed Tick Num" -msgstr "Fixed Tick Num" +#: ../src/backend/filters/spatialAnalysis.cpp:1686 +msgid "Insufficient points to continue" +msgstr "" -#: ../src/backend/filters/boundingBox.cpp:603 -msgid "" -"If true, evenly use specified number of ticks. Otherwise, use distance to " -"determine tick count" +#: ../src/backend/filters/spatialAnalysis.cpp:1687 +msgid "Unable to load file" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:611 -msgid "Num X" -msgstr "Num X" +#: ../src/backend/filters/spatialAnalysis.cpp:2305 +#: ../src/backend/filters/spatialAnalysis.cpp:2624 +#: ../src/backend/filters/spatialAnalysis.cpp:2917 +msgid "Analyse" +msgstr "Analyse" -#: ../src/backend/filters/boundingBox.cpp:614 -msgid "Tick count in X direction" +#: ../src/backend/filters/spatialAnalysis.cpp:2384 +#: ../src/backend/filters/spatialAnalysis.cpp:2474 +#: ../src/backend/filters/spatialAnalysis.cpp:2540 +msgid "Radial Distance" +msgstr "Radialer Abstand" + +#: ../src/backend/filters/spatialAnalysis.cpp:2386 +#: ../src/backend/filters/spatialAnalysis.cpp:2479 +msgid "Count/Distance" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:619 -msgid "Num Y" -msgstr "Num Y" +#: ../src/backend/filters/spatialAnalysis.cpp:2391 +#: ../src/backend/filters/spatialAnalysis.cpp:2484 +msgid "NN Freq." +msgstr "NN Freq." -#: ../src/backend/filters/boundingBox.cpp:622 -msgid "Tick count in Y direction" +#: ../src/backend/filters/spatialAnalysis.cpp:2531 +msgid "Warning, " +msgstr "Warnung, " + +#: ../src/backend/filters/spatialAnalysis.cpp:2532 +msgid "" +" points were unable to find neighbour points that exceeded the search " +"radius, and thus terminated prematurely" msgstr "" +" Punkte konnten keine Nachbapunkte die den Suchradius überschritten finden " +"und beendeten vorzeitig." -#: ../src/backend/filters/boundingBox.cpp:627 -msgid "Num Z" -msgstr "Num Z" +#: ../src/backend/filters/spatialAnalysis.cpp:2542 +msgid " RDF" +msgstr " RDF" -#: ../src/backend/filters/boundingBox.cpp:630 -msgid "Tick count in Z direction" -msgstr "" +#: ../src/backend/filters/spatialAnalysis.cpp:2823 +#: ../src/backend/filters/spatialAnalysis.cpp:3123 +msgid "Number Density (\\#/Vol^3)" +msgstr "Number Density (\\#/Vol^3)" -#: ../src/backend/filters/boundingBox.cpp:636 -msgid "Spacing X" -msgstr "X-Abstand" +#: ../src/backend/filters/spatialAnalysis.cpp:2848 +#: ../src/backend/filters/spatialAnalysis.cpp:3145 +msgid "Warning," +msgstr "Warnung," -#: ../src/backend/filters/boundingBox.cpp:640 -msgid "Distance between ticks on X axis" +#: ../src/backend/filters/spatialAnalysis.cpp:2849 +#: ../src/backend/filters/spatialAnalysis.cpp:3146 +msgid " points were un-analysable. These have been dropped" +msgstr " points were un-analysable. These have been dropped" + +#: ../src/backend/filters/spatialAnalysis.cpp:2871 +#: ../src/backend/filters/spatialAnalysis.cpp:3168 +msgid "And so on..." +msgstr "Und so weiter..." + +#: ../src/backend/filters/spatialAnalysis.cpp:3268 +msgid "Insufficient points to complete analysis" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:644 -msgid "Spacing Y" -msgstr "Y-Abstand" +#: ../src/backend/filters/spatialAnalysis.cpp:3291 +msgid "Axial Distance" +msgstr "" -#: ../src/backend/filters/boundingBox.cpp:648 -msgid "Distance between ticks on Y axis" +#: ../src/backend/filters/spatialAnalysis.cpp:3293 +msgid " 1D Dist. Func." msgstr "" -#: ../src/backend/filters/boundingBox.cpp:652 -msgid "Spacing Z" -msgstr "Z-Abstand" +#: ../src/backend/filters/spatialAnalysis.cpp:3344 +msgid "Binomial" +msgstr "" -#: ../src/backend/filters/boundingBox.cpp:656 -msgid "Distance between ticks on Z axis" +#: ../src/backend/filters/spatialAnalysis.cpp:3477 +#: ../src/backend/filters/spatialAnalysis.cpp:3542 +msgid "Ions in Block" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:664 -msgid "Ticks X" +#: ../src/backend/filters/spatialAnalysis.cpp:3479 +#: ../src/backend/filters/spatialAnalysis.cpp:3544 +#: ../src/backend/filters/spectrumPlot.cpp:79 +msgid "Probability" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:668 -msgid "Display tick marks on X axis" +#: ../src/backend/filters/spatialAnalysis.cpp:3546 +msgid "Count (blocks)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:672 -msgid "Ticks Y" +#: ../src/backend/filters/spatialAnalysis.cpp:3611 +msgid "Build Numerator" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:676 -msgid "Display tick marks on Y axis" +#: ../src/backend/filters/spatialAnalysis.cpp:3625 +msgid "Build Denominator" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:680 -msgid "Ticks Z" +#: ../src/backend/filters/spatialAnalysis.cpp:3961 +msgid "Relative Conc. (%)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:684 -msgid "Display tick marks on Z axis" +#: ../src/backend/filters/profile.cpp:51 +msgid "Cylinder (axial)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:687 -msgid "Tick marks" +#: ../src/backend/filters/profile.cpp:52 +msgid "Cylinder (radial)" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:694 -msgid "Box Colour" -msgstr "Box Farbe" +#: ../src/backend/filters/profile.cpp:595 +msgid "Distance" +msgstr "Abstand" -#: ../src/backend/filters/boundingBox.cpp:698 -msgid "Colour of the bounding box" -msgstr "" +#: ../src/backend/filters/profile.cpp:603 +msgid "Fraction" +msgstr "Anteil" -#: ../src/backend/filters/boundingBox.cpp:703 -msgid "Line thickness" -msgstr "Linienbreite" +#: ../src/backend/filters/profile.cpp:605 +msgid "Density (\\frac{\\#}{len^3})" +msgstr "Dichte (\\frac{\\#}{len^3})" -#: ../src/backend/filters/boundingBox.cpp:707 -msgid "Thickness of the lines used to draw the box" +#: ../src/backend/filters/profile.cpp:632 +msgid "Freq. Profile" +msgstr "Häufigkeitsprofil" + +#: ../src/backend/filters/profile.cpp:684 +msgid "No data remained in profile - cannot display result" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:718 -msgid "Relative size for text" +#: ../src/backend/filters/profile.cpp:971 +msgid "Total Density" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:723 -msgid "Abs. Coords" +#: ../src/backend/filters/profile.cpp:975 +msgid "Do not do per-species analysis, perform density computation only" msgstr "" -#: ../src/backend/filters/boundingBox.cpp:726 -msgid "Show labels using aboslute coo-ordinates" +#: ../src/backend/filters/profile.cpp:989 +msgid "Primitive type" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:191 -msgid "Sampling" +#: ../src/backend/filters/profile.cpp:993 +msgid "Basic shape to use for profile" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:447 -msgid "By Count" -msgstr "Nach Anzahl" +#: ../src/backend/filters/profile.cpp:1005 +msgid "Display the 3D composition profile interaction object" +msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:450 -msgid "Sample up to a fixed number of ions" +#: ../src/backend/filters/profile.cpp:1020 +msgid "Position for centre of cylinder" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:456 -msgid "Per Species" -msgstr "Nach Spezies" +#: ../src/backend/filters/profile.cpp:1028 +msgid "Vector between ends of cylinder" +msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:460 -msgid "Use species specific (from ranging) sampling values" +#: ../src/backend/filters/profile.cpp:1036 +msgid "Prevent length of cylinder changing during interaction" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:489 -msgid "Sampling value for species" +#: ../src/backend/filters/profile.cpp:1079 +msgid "Fixed Bin Num" +msgstr "Fix. Bin-Anz." + +#: ../src/backend/filters/profile.cpp:1082 +msgid "" +"If true, use a fixed number of bins for profile, otherwise use fixed step " +"size" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:505 -#: ../src/backend/filters/ionDownsample.cpp:529 -msgid "Sampling rates" +#: ../src/backend/filters/profile.cpp:1094 +msgid "Number of bins to use for profile" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:513 -msgid "Output Count" -msgstr "Ausgabe Anzahl" +#: ../src/backend/filters/profile.cpp:1100 +#: ../src/backend/filters/spectrumPlot.cpp:583 +msgid "Bin width" +msgstr "Bin-Breite" -#: ../src/backend/filters/ionDownsample.cpp:516 -msgid "Sample up to this value of points" +#: ../src/backend/filters/profile.cpp:1106 +msgid "Size of each bin in profile" msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:521 -msgid "Out Fraction" -msgstr "Ausgabe Anteil" +#: ../src/backend/filters/profile.cpp:1115 +msgid "Convert bin counts into relative frequencies in each bin" +msgstr "" -#: ../src/backend/filters/ionDownsample.cpp:525 -msgid "Sample this fraction of points" +#: ../src/backend/filters/profile.cpp:1119 +msgid "Min. events" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:84 -#: ../src/backend/filters/clusterAnalysis.cpp:1060 -msgid "Size Distribution" -msgstr "Größenverteilung" +#: ../src/backend/filters/profile.cpp:1123 +msgid "Drop data that does not have this many events" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:85 -msgid "Chemistry Distribution" -msgstr "Chemische Verteilung" +#: ../src/backend/filters/profile.cpp:1126 +msgid "Settings" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:503 -msgid "No range data. Can't cluster." -msgstr "Keine Rangedaten. Clusteranalyse nicht möglich." +#: ../src/backend/filters/profile.cpp:1148 +#: ../src/backend/filters/spectrumPlot.cpp:672 +msgid "Plot Type" +msgstr "Plot Type" -#: ../src/backend/filters/clusterAnalysis.cpp:514 -msgid "" -"No ranges selected for cluster \"core\". Cannot continue with clustering." +#: ../src/backend/filters/profile.cpp:1151 +msgid "Visual style for plot" msgstr "" -"Kein Range für cluster \"core\" ausgewählt. Kann mit Clusteranalyse nicht " -"weitermachen." -#: ../src/backend/filters/clusterAnalysis.cpp:523 -msgid "" -"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +#: ../src/backend/filters/profile.cpp:1162 +msgid "Colour of plot" msgstr "" -"Kein Range für \"bulk\" ausgewählt. Kann mit Clusteranalyse nicht " -"weitermachen." -#: ../src/backend/filters/clusterAnalysis.cpp:689 -msgid "Morphology Plot" -msgstr "" +#: ../src/backend/filters/profile.cpp:1178 +msgid "Err. Estimator" +msgstr "Fehlerschätzer" -#: ../src/backend/filters/clusterAnalysis.cpp:690 -msgid "\\lambda_1:\\lambda_2 ratio" +#: ../src/backend/filters/profile.cpp:1181 +msgid "Method of estimating error associated with each bin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:691 -msgid "\\lambda_2:\\lambda_3 ratio" +#: ../src/backend/filters/profile.cpp:1188 +msgid "Avg. Window" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:736 -msgid "No clusters had sufficient dimensionality to compute singular values" +#: ../src/backend/filters/profile.cpp:1191 +msgid "Number of bins to include in moving average filter" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:794 -msgid "Found :" -msgstr "Gefunden:" - -#: ../src/backend/filters/clusterAnalysis.cpp:796 -msgid " clusters" -msgstr " Cluster" +#: ../src/backend/filters/profile.cpp:1195 +msgid "Error analysis" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:888 -msgid "Compositions (fractional, core+bulk)" -msgstr "Zusammensetzungen (fractional, core+bulk)" +#: ../src/backend/filters/transform.cpp:84 +msgid "Translate" +msgstr "Translate" -#: ../src/backend/filters/clusterAnalysis.cpp:890 -msgid "Compositions (fractional, core only)" -msgstr "Zusammensetzungen (fractional, core only)" +#: ../src/backend/filters/transform.cpp:85 +msgid "Scale (isotropic)" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:908 -msgid "Frequencies (core+bulk)" -msgstr "Häufigkeiten (core+bulk)" +#: ../src/backend/filters/transform.cpp:86 +msgid "Scale (anisotropic)" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:939 -msgid "Core Link + Erode" -msgstr "Core Link + Erode" +#: ../src/backend/filters/transform.cpp:87 +msgid "Rotate" +msgstr "Rotieren" -#: ../src/backend/filters/clusterAnalysis.cpp:947 -msgid "Cluster algorithm mode" +#: ../src/backend/filters/transform.cpp:88 +msgid "Value Shuffle" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:958 -msgid "Core Classify" +#: ../src/backend/filters/transform.cpp:89 +msgid "Spatial Noise" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:961 -msgid "" -"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" +#: ../src/backend/filters/transform.cpp:90 +msgid "Translate Value" +msgstr "Translate Wert" + +#: ../src/backend/filters/transform.cpp:91 +msgid "Crop Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:967 -msgid "Core Classify Dist" -msgstr "Core Classify Dist" +#: ../src/backend/filters/transform.cpp:95 +msgid "Specify" +msgstr "Angeben" -#: ../src/backend/filters/clusterAnalysis.cpp:970 -msgid "Restrict only atoms by distance to be cluster sources" -msgstr "" +#: ../src/backend/filters/transform.cpp:96 +msgid "Boundbox Centre" +msgstr "Boundbox Zentrum" -#: ../src/backend/filters/clusterAnalysis.cpp:975 -msgid "Classify Knn Max" -msgstr "Classify Knn Max" +#: ../src/backend/filters/transform.cpp:97 +msgid "Mass Centre" +msgstr "Massen-Zentrum" -#: ../src/backend/filters/clusterAnalysis.cpp:978 -msgid "" -"Require that the kth NN (this number) is within the classify distance, to be " -"a cluster source" +#: ../src/backend/filters/transform.cpp:1080 +msgid "Shuffle" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:984 -msgid "Core Link Dist" -msgstr "Core Link Dist" +#: ../src/backend/filters/transform.cpp:1104 +msgid "Splice" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:987 -msgid "Distance between clusters to allow linking" +#: ../src/backend/filters/transform.cpp:1152 +msgid "Algorithm to use to transform point data" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:992 -msgid "Bulk Link" +#: ../src/backend/filters/transform.cpp:1169 +msgid "Origin mode" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:995 -#: ../src/backend/filters/clusterAnalysis.cpp:1012 -msgid "Enable linking of non-cluster species - eg for composition analysis " +#: ../src/backend/filters/transform.cpp:1172 +msgid "Select how transform origin is computed" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1002 -msgid "Bulk Link (Envelope) Dist" -msgstr "Bulk Link (Envelope) Dist" +#: ../src/backend/filters/transform.cpp:1177 +msgid "Show marker" +msgstr "Zeige Markierung" -#: ../src/backend/filters/clusterAnalysis.cpp:1005 -msgid "" -"Distance from core points that form cluster that is used to grab surrounding " -"bulk points" +#: ../src/backend/filters/transform.cpp:1181 +msgid "Display an interactive object to set transform origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1009 -msgid "Erosion" +#: ../src/backend/filters/transform.cpp:1183 +msgid "Display a small marker to denote transform origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1018 -msgid "Erode Dist" -msgstr "Erode Dist" +#: ../src/backend/filters/transform.cpp:1199 +msgid "Translation" +msgstr "Translation" -#: ../src/backend/filters/clusterAnalysis.cpp:1021 -msgid "" -"Distance from unclustered material in which bulk points are eroded from " -"cluster" +#: ../src/backend/filters/transform.cpp:1202 +msgid "Translation vector for transform" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1028 -msgid "Clustering Params" -msgstr "Cluster Parameter" +#: ../src/backend/filters/transform.cpp:1214 +msgid "Offset" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1033 -msgid "Size Cropping" -msgstr "Größeneinschrankungen" +#: ../src/backend/filters/transform.cpp:1218 +msgid "Scalar to use to offset each point's associated value" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1036 -msgid "Remove clusters based upon size distribution" +#: ../src/backend/filters/transform.cpp:1235 +#: ../src/backend/filters/transform.cpp:1262 +msgid "Origin of scale transform" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1242 +#: ../src/backend/filters/transform.cpp:1269 +msgid "Scale Fact." +msgstr "Skalierungsfaktor" + +#: ../src/backend/filters/transform.cpp:1245 +#: ../src/backend/filters/transform.cpp:1272 +msgid "Enlargement factor for scaling around origin" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1043 -msgid "Min Size" -msgstr "Min Größe" +#: ../src/backend/filters/transform.cpp:1288 +msgid "Origin of rotation" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1046 -msgid "Remove clusters below this size" +#: ../src/backend/filters/transform.cpp:1296 +msgid "Axis around which to revolve" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1051 -msgid "Max Size" -msgstr "Max Größe" +#: ../src/backend/filters/transform.cpp:1301 +msgid "Angle (deg)" +msgstr "Winkel (deg)" -#: ../src/backend/filters/clusterAnalysis.cpp:1054 -msgid "Remove clusters above this size" +#: ../src/backend/filters/transform.cpp:1304 +msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1063 -msgid "Show number of clusters as a function of cluster size" +#: ../src/backend/filters/transform.cpp:1321 +msgid "Noise Type" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1069 -msgid "Log Scale" -msgstr "Log. Skala" - -#: ../src/backend/filters/clusterAnalysis.cpp:1072 -msgid "Use logarithmic scale for size distribution" +#: ../src/backend/filters/transform.cpp:1324 +msgid "Method to use to degrade point data" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1079 -msgid "Morphology Dist." +#: ../src/backend/filters/transform.cpp:1331 +msgid "Noise level" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1082 -msgid "Create a plot showing cluster aspect ratio" -msgstr "" +#: ../src/backend/filters/transform.cpp:1333 +msgid "Standard dev." +msgstr "Standardabweichung" -#: ../src/backend/filters/clusterAnalysis.cpp:1088 -msgid "Cluster Id" +#: ../src/backend/filters/transform.cpp:1341 +msgid "Amplitude of noise" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1091 -msgid "Assign cluster output a unique per-cluster value (id)." +#: ../src/backend/filters/transform.cpp:1355 +msgid "Min Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1098 -msgid "Chemistry Dist." -msgstr "Chemistry Dist." +#: ../src/backend/filters/transform.cpp:1359 +msgid "Minimum value to use for crop" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1101 -msgid "Create a plot showing chemistry for each cluster size" +#: ../src/backend/filters/transform.cpp:1363 +msgid "Max Value" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1111 -msgid "Convert cluster counts to composition" +#: ../src/backend/filters/transform.cpp:1367 +msgid "Maximum value to use for crop" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1117 -msgid "Postprocess" -msgstr "Postprozess" +#: ../src/backend/filters/transform.cpp:1376 +msgid "Transform Params" +msgstr "Transformationsparameter" -#: ../src/backend/filters/clusterAnalysis.cpp:1136 -msgid "If selected, use as \"core\" ion type (can make clusters)" +#: ../src/backend/filters/transform.cpp:1745 +msgid "White" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1141 -msgid "Core Ranges" -msgstr "Core Ranges" +#: ../src/backend/filters/transform.cpp:1747 +msgid "Gaussian" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1147 -msgid "Enable/Disable All" +#: ../src/backend/filters/boundingBox.cpp:64 +msgid "Box only" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1152 -msgid "Enable/disable all ions" +#: ../src/backend/filters/boundingBox.cpp:65 +msgid "Tick" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1165 -msgid "" -"If selected, use as \"bulk\" ion type (can be included in existing clusters)" +#: ../src/backend/filters/boundingBox.cpp:66 +msgid "Dimension" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1170 -msgid "Bulk Ranges" -msgstr "Bulk Ranges" +#: ../src/backend/filters/boundingBox.cpp:572 +msgid "If true, show box, otherwise hide box" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1186 -msgid "Max. Sep + Erode" -msgstr "Max. Sep + Erode" +#: ../src/backend/filters/boundingBox.cpp:585 +msgid "Style" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1939 -msgid " --------------------------- Parameter selection notice ------------- " -msgstr " --------------------------- Parameterauswahl Notiz ------------- " +#: ../src/backend/filters/boundingBox.cpp:588 +msgid "Box display mode" +msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1940 -msgid "You have specified a bulk distance larger than half your link distance." +#: ../src/backend/filters/boundingBox.cpp:591 +msgid "Display mode" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:1941 +#: ../src/backend/filters/boundingBox.cpp:600 +msgid "Fixed Tick Num" +msgstr "Fixed Tick Num" + +#: ../src/backend/filters/boundingBox.cpp:604 msgid "" -"You can do this; thats OK, but the output is no longer independent of the " -"computational process;" +"If true, evenly use specified number of ticks. Otherwise, use distance to " +"determine tick count" msgstr "" -"Sie könne das machen, das ist in Ordnung, aber die Ausgabe ist nicht länger " -"unabhängig vom Berechnungsprozess" -#: ../src/backend/filters/clusterAnalysis.cpp:1942 -msgid "" -"This will be a problem in the case where two or more clusters can equally " -"lay claim to a \"bulk\" ion. " +#: ../src/backend/filters/boundingBox.cpp:612 +msgid "Num X" +msgstr "Num X" + +#: ../src/backend/filters/boundingBox.cpp:615 +msgid "Tick count in X direction" msgstr "" -"Dies ist ein Problem wenn zwei oder mehrere Cluster auf dasselbe \"bulk\" " -"Ion Anspruch erheben. " -#: ../src/backend/filters/clusterAnalysis.cpp:1943 -msgid "" -" If your inter-cluster distance is sufficiently large (larger than your bulk " -"linking distance), then you can get away with this." +#: ../src/backend/filters/boundingBox.cpp:620 +msgid "Num Y" +msgstr "Num Y" + +#: ../src/backend/filters/boundingBox.cpp:623 +msgid "Tick count in Y direction" msgstr "" -" If your inter-cluster distance is sufficiently large (larger than your bulk " -"linking distance), then you can get away with this." -#: ../src/backend/filters/clusterAnalysis.cpp:1944 -msgid "" -" In theory it is possible to \"join\" the clusters, but this has not been " -"implemented for speed reasons." +#: ../src/backend/filters/boundingBox.cpp:628 +msgid "Num Z" +msgstr "Num Z" + +#: ../src/backend/filters/boundingBox.cpp:631 +msgid "Tick count in Z direction" msgstr "" -"Theoretisch ist es möglich die Cluster zu 'verbinden', dies wurde jedoch aus " -"Gescheindigkeitsgründen nicht implementiert." -#: ../src/backend/filters/clusterAnalysis.cpp:1945 -msgid "" -"If you want this, please contact the author, or just use the source to add " -"this in yourself." +#: ../src/backend/filters/boundingBox.cpp:637 +msgid "Spacing X" +msgstr "X-Abstand" + +#: ../src/backend/filters/boundingBox.cpp:641 +msgid "Distance between ticks on X axis" msgstr "" -"Sollten Sie dies wollen, kontaktieren Sie den Autor oder verwenden Sie den " -"Sourcecode um es selbst hinzuzufügen." -#: ../src/backend/filters/clusterAnalysis.cpp:1946 -msgid "---------------------------------------------------------------------- " -msgstr "---------------------------------------------------------------------- " +#: ../src/backend/filters/boundingBox.cpp:645 +msgid "Spacing Y" +msgstr "Y-Abstand" -#: ../src/backend/filters/clusterAnalysis.cpp:1975 -msgid "Build Core" +#: ../src/backend/filters/boundingBox.cpp:649 +msgid "Distance between ticks on Y axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2003 -msgid "Core" -msgstr "Kern" +#: ../src/backend/filters/boundingBox.cpp:653 +msgid "Spacing Z" +msgstr "Z-Abstand" -#: ../src/backend/filters/clusterAnalysis.cpp:2126 -msgid "Bulk" +#: ../src/backend/filters/boundingBox.cpp:657 +msgid "Distance between ticks on Z axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2204 -msgid "Erode" +#: ../src/backend/filters/boundingBox.cpp:665 +msgid "Ticks X" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2282 -msgid "Re-Collate" +#: ../src/backend/filters/boundingBox.cpp:669 +msgid "Display tick marks on X axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2337 -msgid "Classify Core" +#: ../src/backend/filters/boundingBox.cpp:673 +msgid "Ticks Y" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2428 -msgid "Build Bulk" +#: ../src/backend/filters/boundingBox.cpp:677 +msgid "Display tick marks on Y axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2676 -#: ../src/backend/filters/clusterAnalysis.cpp:2879 -msgid "Cluster Size" +#: ../src/backend/filters/boundingBox.cpp:681 +msgid "Ticks Z" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2677 -#: ../src/backend/filters/clusterAnalysis.cpp:2883 -msgid "Frequency" +#: ../src/backend/filters/boundingBox.cpp:685 +msgid "Display tick marks on Z axis" msgstr "" -#: ../src/backend/filters/clusterAnalysis.cpp:2881 -msgid "Composition" +#: ../src/backend/filters/boundingBox.cpp:688 +msgid "Tick marks" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:123 -msgid "Local Density" -msgstr "Lokale Dichte" +#: ../src/backend/filters/boundingBox.cpp:695 +msgid "Box Colour" +msgstr "Box Farbe" -#: ../src/backend/filters/spatialAnalysis.cpp:124 -msgid "Density Filtering" +#: ../src/backend/filters/boundingBox.cpp:699 +msgid "Colour of the bounding box" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:125 -msgid "Radial Distribution" -msgstr "Radial Distribution" +#: ../src/backend/filters/boundingBox.cpp:704 +msgid "Line thickness" +msgstr "Linienbreite" -#: ../src/backend/filters/spatialAnalysis.cpp:126 -msgid "Axial Distribution" +#: ../src/backend/filters/boundingBox.cpp:708 +msgid "Thickness of the lines used to draw the box" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:127 -msgid "Binomial Distribution" -msgstr "" +#: ../src/backend/filters/boundingBox.cpp:716 +#: ../src/backend/filters/annotation.cpp:856 +msgid "Font Size" +msgstr "Schriftgröße" -#: ../src/backend/filters/spatialAnalysis.cpp:128 -msgid "Point Em/Replacement" +#: ../src/backend/filters/boundingBox.cpp:719 +msgid "Relative size for text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:129 -msgid "Local Concentration" +#: ../src/backend/filters/boundingBox.cpp:724 +msgid "Abs. Coords" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:133 -msgid "Neighbour Count" +#: ../src/backend/filters/boundingBox.cpp:727 +msgid "Show labels using aboslute coo-ordinates" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:643 -msgid "Load" -msgstr "" +#: ../src/backend/filters/annotation.cpp:73 +msgid "Arrow" +msgstr "Pfeil" -#: ../src/backend/filters/spatialAnalysis.cpp:660 -#: ../src/backend/filters/spatialAnalysis.cpp:2330 -#: ../src/backend/filters/spatialAnalysis.cpp:2383 -#: ../src/backend/filters/spatialAnalysis.cpp:2733 -#: ../src/backend/filters/spatialAnalysis.cpp:3022 -#: ../src/backend/filters/spatialAnalysis.cpp:3540 -#: ../src/backend/filters/spatialAnalysis.cpp:4184 -msgid "Build" -msgstr "" +#: ../src/backend/filters/annotation.cpp:74 +msgid "Text" +msgstr "Text" -#: ../src/backend/filters/spatialAnalysis.cpp:705 -#: ../src/backend/filters/spatialAnalysis.cpp:3558 -#: ../src/backend/filters/spatialAnalysis.cpp:4073 -#: ../src/backend/filters/spatialAnalysis.cpp:4201 -msgid "Compute" -msgstr "" +#: ../src/backend/filters/annotation.cpp:75 +msgid "Arrow+Text" +msgstr "Pfeil+Text" -#: ../src/backend/filters/spatialAnalysis.cpp:803 -msgid "Spatial analysis algorithm to use" -msgstr "" +#: ../src/backend/filters/annotation.cpp:76 +msgid "Angle" +msgstr "Winkel" -#: ../src/backend/filters/spatialAnalysis.cpp:827 -#: ../src/backend/filters/spatialAnalysis.cpp:878 -msgid "Stop Mode" -msgstr "" +#: ../src/backend/filters/annotation.cpp:77 +msgid "Ruler" +msgstr "Lineal" -#: ../src/backend/filters/spatialAnalysis.cpp:830 -msgid "Method to use to terminate algorithm when examining each point" +#: ../src/backend/filters/annotation.cpp:177 ../src/backend/filter.cpp:55 +msgid "Draw" +msgstr "Zeichnen" + +#: ../src/backend/filters/annotation.cpp:532 +msgid "Enable" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:837 -msgid "NN Max" -msgstr "NN Max" +#: ../src/backend/filters/annotation.cpp:535 +msgid "Enable/disable annotation" +msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:840 -msgid "Maximum number of neighbours to examine" +#: ../src/backend/filters/annotation.cpp:556 +msgid "Type or style of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:847 -msgid "Normalise bins" +#: ../src/backend/filters/annotation.cpp:572 +#: ../src/backend/filters/annotation.cpp:676 +msgid "Text of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:850 -msgid "" -"Normalise counts by binwidth. Needed when comparing NN histograms against " -"one another" +#: ../src/backend/filters/annotation.cpp:580 +msgid "Position of annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:856 -msgid "Show Random" +#: ../src/backend/filters/annotation.cpp:584 +#: ../src/backend/filters/annotation.cpp:691 +#: ../src/backend/filters/annotation.cpp:750 +#: ../src/backend/filters/annotation.cpp:839 +msgid "Up dir" +msgstr "Up dir" + +#: ../src/backend/filters/annotation.cpp:588 +#: ../src/backend/filters/annotation.cpp:843 +msgid "Vector for up direction of annotation text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:859 -msgid "Show a fitted (density matched) theoretical distribution" +#: ../src/backend/filters/annotation.cpp:592 +#: ../src/backend/filters/annotation.cpp:698 +#: ../src/backend/filters/annotation.cpp:742 +#: ../src/backend/filters/annotation.cpp:847 +msgid "Across dir" +msgstr "Across dir" + +#: ../src/backend/filters/annotation.cpp:596 +#: ../src/backend/filters/annotation.cpp:851 +msgid "Reading direction for annotation" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:870 -msgid "Dist Max" -msgstr "Abst. Max." +#: ../src/backend/filters/annotation.cpp:601 +#: ../src/backend/filters/annotation.cpp:683 +#: ../src/backend/filters/annotation.cpp:777 +msgid "Text size" +msgstr "Textgröße" -#: ../src/backend/filters/spatialAnalysis.cpp:873 -msgid "Maximum distance from each point for search" +#: ../src/backend/filters/annotation.cpp:605 +#: ../src/backend/filters/annotation.cpp:687 +#: ../src/backend/filters/annotation.cpp:859 +msgid "Relative size of annotation text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:890 -#: ../src/backend/filters/spatialAnalysis.cpp:1024 -msgid "Number of bins for output 1D RDF plot" +#: ../src/backend/filters/annotation.cpp:617 +#: ../src/backend/filters/annotation.cpp:658 +msgid "3D position for tail of arrow" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:896 -msgid "Surface Remove" +#: ../src/backend/filters/annotation.cpp:625 +#: ../src/backend/filters/annotation.cpp:667 +msgid "3D Position to which arrow points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:899 -msgid "" -"Exclude surface as part of source to minimise bias in RDF (at cost of " -"increased noise)" +#: ../src/backend/filters/annotation.cpp:628 +#: ../src/backend/filters/annotation.cpp:738 +msgid "Positioning" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:906 -msgid "Remove Dist" +#: ../src/backend/filters/annotation.cpp:633 +#: ../src/backend/filters/annotation.cpp:705 +msgid "Tip radius" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:909 -msgid "Minimum distance to remove from surface" +#: ../src/backend/filters/annotation.cpp:637 +msgid "Size of the arrow head" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:917 -#: ../src/backend/filters/spatialAnalysis.cpp:1029 -msgid "Plot colour " -msgstr "Plotfarbe " - -#: ../src/backend/filters/spatialAnalysis.cpp:920 -#: ../src/backend/filters/spatialAnalysis.cpp:1032 -msgid "Colour of output plot" +#: ../src/backend/filters/annotation.cpp:641 +msgid "Line size" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:924 -#: ../src/backend/filters/spatialAnalysis.cpp:1010 -#: ../src/backend/filters/spatialAnalysis.cpp:1015 -#: ../src/backend/filters/spatialAnalysis.cpp:1064 -#: ../src/backend/filters/spatialAnalysis.cpp:1103 -msgid "Alg. Params." +#: ../src/backend/filters/annotation.cpp:645 +msgid "Thickness of line used to draw arrow stem" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:937 -#: ../src/backend/filters/spatialAnalysis.cpp:1207 -msgid "Source" -msgstr "Quelle" - -#: ../src/backend/filters/spatialAnalysis.cpp:940 -msgid "Ions to use for initiating RDF search" +#: ../src/backend/filters/annotation.cpp:679 +msgid "Options" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:953 -#: ../src/backend/filters/spatialAnalysis.cpp:1223 -#: ../src/backend/filters/spatialAnalysis.cpp:1249 -msgid "Enable/disable ion as source" -msgstr "" +#: ../src/backend/filters/annotation.cpp:715 +msgid "Position A" +msgstr "Position A" -#: ../src/backend/filters/spatialAnalysis.cpp:958 -#: ../src/backend/filters/spatialAnalysis.cpp:1228 -msgid "Source Ion" +#: ../src/backend/filters/annotation.cpp:719 +msgid "Location of first non-central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:965 ../src/gl/cameras.cpp:611 -msgid "Target" -msgstr "Ziel" +#: ../src/backend/filters/annotation.cpp:723 +msgid "Origin " +msgstr "Ursprung " -#: ../src/backend/filters/spatialAnalysis.cpp:968 -#: ../src/backend/filters/spatialAnalysis.cpp:1264 -msgid "Enable/disable all ions as target" +#: ../src/backend/filters/annotation.cpp:727 +msgid "Location of central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:980 -#: ../src/backend/filters/spatialAnalysis.cpp:1276 -msgid "Enable/disable this ion as target" -msgstr "" +#: ../src/backend/filters/annotation.cpp:731 +msgid "Position B" +msgstr "Position B" -#: ../src/backend/filters/spatialAnalysis.cpp:984 -msgid "Target Ion" +#: ../src/backend/filters/annotation.cpp:735 +msgid "Location of second non-central vertex" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:994 -msgid "Cutoff" +#: ../src/backend/filters/annotation.cpp:746 +msgid "Reading direction for angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:997 -msgid "Remove points with local density above/below this value" +#: ../src/backend/filters/annotation.cpp:751 +msgid "Vector for up direction of angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1003 -msgid "Retain Upper" -msgstr "" +#: ../src/backend/filters/annotation.cpp:759 +msgid "Reflexive" +msgstr "Reflexive" -#: ../src/backend/filters/spatialAnalysis.cpp:1006 -msgid "Retain either points with density above (enabled) or below cutoff" +#: ../src/backend/filters/annotation.cpp:762 +msgid "Measure interor (enabled) or exterior angle (disabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1052 -msgid "Vector between centre and end of cylinder" -msgstr "" +#: ../src/backend/filters/annotation.cpp:767 +msgid "Show Angle" +msgstr "Zeige Winkel" -#: ../src/backend/filters/spatialAnalysis.cpp:1071 -#: ../src/backend/filters/spatialAnalysis.cpp:3827 -#: ../src/backend/filters/spatialAnalysis.cpp:3886 -msgid "Block size" +#: ../src/backend/filters/annotation.cpp:771 +msgid "Display angle text (when enabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1074 -msgid "Number of ions to use per block" +#: ../src/backend/filters/annotation.cpp:781 +msgid "Size of angle text" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1081 -msgid "Max Block Aspect" -msgstr "" +#: ../src/backend/filters/annotation.cpp:799 +msgid "Digit format" +msgstr "Zahlenformat" -#: ../src/backend/filters/spatialAnalysis.cpp:1084 +#: ../src/backend/filters/annotation.cpp:803 msgid "" -"Maximum allowable block aspect ratio. Blocks above this aspect are " -"discarded. Setting too high decreases correlation strength. Too low causes " -"loss of statistical power." +"Format of angle text; # for numeral position, '.' for separator, eg ##.## " +"gives 12.34" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1095 -msgid "Extrusion Direction" -msgstr "" +#: ../src/backend/filters/annotation.cpp:809 +#: ../src/backend/filters/annotation.cpp:894 +msgid "Sphere size" +msgstr "Kugelgröße" -#: ../src/backend/filters/spatialAnalysis.cpp:1098 -msgid "Direction in which blocks are extended during construction." +#: ../src/backend/filters/annotation.cpp:813 +#: ../src/backend/filters/annotation.cpp:898 +msgid "Marker sphere size for manipulating tool" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1107 -msgid "Plot Counts" +#: ../src/backend/filters/annotation.cpp:827 +msgid "Ruler beginning 3D location" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1110 -msgid "Show the counts in the binomial histogram" +#: ../src/backend/filters/annotation.cpp:835 +msgid "Ruler finish 3D location" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1119 -msgid "" -"Normalise the counts in the binomial histogram to a probability density " -"function" -msgstr "" +#: ../src/backend/filters/annotation.cpp:865 +msgid "Fixed ticks" +msgstr "Fixe Marker" -#: ../src/backend/filters/spatialAnalysis.cpp:1133 -msgid "Display Grid" +#: ../src/backend/filters/annotation.cpp:868 +msgid "" +"Use fixed (enabled) number of text markers, or one every fixed distance " +"(disabled)" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1142 -msgid "View Options" -msgstr "" +#: ../src/backend/filters/annotation.cpp:875 +msgid "Num Ticks" +msgstr "Anzahl Marker" -#: ../src/backend/filters/spatialAnalysis.cpp:1148 -msgid "Data File" +#: ../src/backend/filters/annotation.cpp:878 +msgid "Number of tick marks along ruler" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1152 -msgid "Pos file of points to subtract/replace/etc" -msgstr "" +#: ../src/backend/filters/annotation.cpp:885 +msgid "Tick Spacing" +msgstr "Markerabstand" -#: ../src/backend/filters/spatialAnalysis.cpp:1157 -msgid "Match Tol." +#: ../src/backend/filters/annotation.cpp:888 +msgid "Distance between tick marks along ruler" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1160 -msgid "Tolerance to allow for matching" +#: ../src/backend/filters/annotation.cpp:912 +msgid "Colour for ruler and ticks" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1176 -msgid "Replacment condition" +#: ../src/backend/filters/ionDownsample.cpp:192 +msgid "Sampling" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1182 -msgid "Replace value" -msgstr "" +#: ../src/backend/filters/ionDownsample.cpp:448 +msgid "By Count" +msgstr "Nach Anzahl" -#: ../src/backend/filters/spatialAnalysis.cpp:1185 -msgid "Use value data from file when replacing ions" +#: ../src/backend/filters/ionDownsample.cpp:451 +msgid "Sample up to a fixed number of ions" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1190 -msgid "Replacement" -msgstr "" +#: ../src/backend/filters/ionDownsample.cpp:457 +msgid "Per Species" +msgstr "Nach Spezies" -#: ../src/backend/filters/spatialAnalysis.cpp:1210 -msgid "Enable/disable all ions as source" +#: ../src/backend/filters/ionDownsample.cpp:461 +msgid "Use species specific (from ranging) sampling values" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1236 -msgid "Ions to use as Numerator for conc. calculation" +#: ../src/backend/filters/ionDownsample.cpp:491 +msgid "Sampling value for species" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1785 -msgid "Spatial analysis aborted by user" -msgstr "Spatial analysis aborted by user" +#: ../src/backend/filters/ionDownsample.cpp:498 +#: ../src/backend/filters/ionInfo.cpp:317 +msgid "Unranged" +msgstr "Nicht Geranged" -#: ../src/backend/filters/spatialAnalysis.cpp:1786 -msgid "Insufficient memory to complete analysis" +#: ../src/backend/filters/ionDownsample.cpp:507 +#: ../src/backend/filters/ionDownsample.cpp:531 +msgid "Sampling rates" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1787 -msgid "Required range data not present" -msgstr "" +#: ../src/backend/filters/ionDownsample.cpp:515 +msgid "Output Count" +msgstr "Ausgabe Anzahl" -#: ../src/backend/filters/spatialAnalysis.cpp:1788 -msgid "Insufficient memory for binomial. Reduce input size?" +#: ../src/backend/filters/ionDownsample.cpp:518 +msgid "Sample up to this value of points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:1789 -msgid "Insufficient points to continue" -msgstr "" +#: ../src/backend/filters/ionDownsample.cpp:523 +msgid "Out Fraction" +msgstr "Ausgabe Anteil" -#: ../src/backend/filters/spatialAnalysis.cpp:1790 -msgid "Unable to load file" +#: ../src/backend/filters/ionDownsample.cpp:527 +msgid "Sample this fraction of points" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2437 -#: ../src/backend/filters/spatialAnalysis.cpp:2756 -#: ../src/backend/filters/spatialAnalysis.cpp:3046 -msgid "Analyse" -msgstr "Analyse" +#: ../src/backend/filters/ionInfo.cpp:37 +msgid "Rectilinear" +msgstr "Geradlinig" -#: ../src/backend/filters/spatialAnalysis.cpp:2516 -#: ../src/backend/filters/spatialAnalysis.cpp:2606 -#: ../src/backend/filters/spatialAnalysis.cpp:2672 -msgid "Radial Distance" -msgstr "Radialer Abstand" +#: ../src/backend/filters/ionInfo.cpp:38 +msgid "Convex hull" +msgstr "Konvexe Hülle" -#: ../src/backend/filters/spatialAnalysis.cpp:2518 -#: ../src/backend/filters/spatialAnalysis.cpp:2611 -msgid "Count/Distance" +#: ../src/backend/filters/ionInfo.cpp:200 +msgid "No ions" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2523 -#: ../src/backend/filters/spatialAnalysis.cpp:2616 -msgid "NN Freq." -msgstr "NN Freq." - -#: ../src/backend/filters/spatialAnalysis.cpp:2663 -msgid "Warning, " -msgstr "Warnung, " - -#: ../src/backend/filters/spatialAnalysis.cpp:2664 +#: ../src/backend/filters/ionInfo.cpp:226 +#: ../src/backend/filters/spectrumPlot.cpp:433 msgid "" -" points were unable to find neighbour points that exceeded the search " -"radius, and thus terminated prematurely" +"Background fit failed - input data was considered ill formed (gauss-test)" msgstr "" -" Punkte konnten keine Nachbapunkte die den Suchradius überschritten finden " -"und beendeten vorzeitig." - -#: ../src/backend/filters/spatialAnalysis.cpp:2674 -msgid " RDF" -msgstr " RDF" -#: ../src/backend/filters/spatialAnalysis.cpp:2952 -#: ../src/backend/filters/spatialAnalysis.cpp:3251 -msgid "Number Density (\\#/Vol^3)" -msgstr "Number Density (\\#/Vol^3)" +#: ../src/backend/filters/ionInfo.cpp:227 +msgid "Following data has not been corrected" +msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:2977 -#: ../src/backend/filters/spatialAnalysis.cpp:3271 -msgid "Warning," -msgstr "Warnung," +#: ../src/backend/filters/ionInfo.cpp:279 +msgid "--Counts--" +msgstr "- Anzahl -" -#: ../src/backend/filters/spatialAnalysis.cpp:2978 -#: ../src/backend/filters/spatialAnalysis.cpp:3272 -msgid " points were un-analysable. These have been dropped" -msgstr " points were un-analysable. These have been dropped" +#: ../src/backend/filters/ionInfo.cpp:289 +msgid "Total Ranged\t" +msgstr "Gesamt ranged\t" -#: ../src/backend/filters/spatialAnalysis.cpp:3000 -#: ../src/backend/filters/spatialAnalysis.cpp:3294 -msgid "And so on..." -msgstr "Und so weiter..." +#: ../src/backend/filters/ionInfo.cpp:294 +msgid "Total (incl. unranged)\t" +msgstr "Total (inkl. nicht geranged)" -#: ../src/backend/filters/spatialAnalysis.cpp:3376 -msgid "Extract" +#: ../src/backend/filters/ionInfo.cpp:307 +msgid "n/a" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3449 -msgid "Reduce" -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:330 +msgid "Number of points : " +msgstr "Anzahl der Punkte: " -#: ../src/backend/filters/spatialAnalysis.cpp:3604 -msgid "Insufficient points to complete analysis" -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:359 +msgid "Rectilinear Bounds : " +msgstr "Geradlinige Grenzen:" -#: ../src/backend/filters/spatialAnalysis.cpp:3627 -msgid "Axial Distance" -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:364 +msgid "Volume (len^3): " +msgstr "Volumen (Läng.^3)" -#: ../src/backend/filters/spatialAnalysis.cpp:3629 -msgid " 1D Dist. Func." -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:381 +msgid "Convex Volume (len^3): " +msgstr "Konvexes Volumen (Läng.^3)" -#: ../src/backend/filters/spatialAnalysis.cpp:3698 -msgid "Binomial" -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:384 +msgid "Unable to compute volume" +msgstr "Kann Volumen nicht berechnen" -#: ../src/backend/filters/spatialAnalysis.cpp:3829 -#: ../src/backend/filters/spatialAnalysis.cpp:3888 -msgid "Rel. Frequency" +#: ../src/backend/filters/ionInfo.cpp:413 +msgid "Ranged Density (pts/vol):" +msgstr "Ranged Dichte (pts / vol):" + +#: ../src/backend/filters/ionInfo.cpp:418 +msgid "Total Density (pts/vol):" +msgstr "Gesamtdichte (pts / vol):" + +#: ../src/backend/filters/ionInfo.cpp:448 +msgid "Compositions" +msgstr "Zusammensetzungen" + +#: ../src/backend/filters/ionInfo.cpp:449 +msgid "Display compositional data for points in console" msgstr "" -#: ../src/backend/filters/spatialAnalysis.cpp:3966 -msgid "Build Numerator" -msgstr "" +#: ../src/backend/filters/ionInfo.cpp:453 +msgid "Counts" +msgstr "Anzahl" -#: ../src/backend/filters/spatialAnalysis.cpp:3980 -msgid "Build Denominator" +#: ../src/backend/filters/ionInfo.cpp:454 +msgid "Display count data for points in console" msgstr "" -#: ../src/backend/filters/ionColour.cpp:257 -msgid "Colour Map" -msgstr "Farbtabelle" - -#: ../src/backend/filters/ionColour.cpp:265 -msgid "Reverse map" +#: ../src/backend/filters/ionInfo.cpp:461 +msgid "Ion data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:266 -msgid "Reverse the colour scale" +#: ../src/backend/filters/ionInfo.cpp:469 +msgid "Normalise count data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:279 -msgid "Opacity" +#: ../src/backend/filters/ionInfo.cpp:533 +msgid "Volume" +msgstr "Volumen" + +#: ../src/backend/filters/ionInfo.cpp:536 +msgid "Compute volume for point data" msgstr "" -#: ../src/backend/filters/ionColour.cpp:286 -msgid "Num Colours" +#: ../src/backend/filters/ionInfo.cpp:552 +msgid "Select volume counting technique" msgstr "" -#: ../src/backend/filters/ionColour.cpp:288 -msgid "Number of unique colours to use in colour map" +#: ../src/backend/filters/ionInfo.cpp:565 +msgid "Volume data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:61 +#: ../src/backend/filters/dataLoad.cpp:64 msgid "Auto" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:62 +#: ../src/backend/filters/dataLoad.cpp:65 msgid "Little" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:63 +#: ../src/backend/filters/dataLoad.cpp:66 msgid "Big" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:66 +#: ../src/backend/filters/dataLoad.cpp:69 msgid "POS Data" msgstr "Pos-Daten" -#: ../src/backend/filters/dataLoad.cpp:67 +#: ../src/backend/filters/dataLoad.cpp:70 msgid "Text Data" msgstr "Text-Daten" -#: ../src/backend/filters/dataLoad.cpp:68 +#: ../src/backend/filters/dataLoad.cpp:71 msgid "ATO Data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:248 +#: ../src/backend/filters/dataLoad.cpp:72 +msgid "Tapsim Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:73 +msgid "3Dap/Posap OPS Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:266 msgid " does not exist" msgstr " existiert nicht" -#: ../src/backend/filters/dataLoad.cpp:275 +#: ../src/backend/filters/dataLoad.cpp:293 msgid "Reading File" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:290 -#: ../src/backend/filters/dataLoad.cpp:303 -#: ../src/backend/filters/dataLoad.cpp:347 -#: ../src/backend/filters/dataLoad.cpp:358 -#: ../src/backend/filters/dataLoad.cpp:418 +#: ../src/backend/filters/dataLoad.cpp:308 +#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:365 +#: ../src/backend/filters/dataLoad.cpp:376 +#: ../src/backend/filters/dataLoad.cpp:436 +#: ../src/backend/filters/dataLoad.cpp:458 +#: ../src/backend/filters/dataLoad.cpp:476 msgid "Error loading file: " msgstr "Fehler beim Laden der Datei: " -#: ../src/backend/filters/dataLoad.cpp:320 +#: ../src/backend/filters/dataLoad.cpp:338 msgid "Sampling is active, loaded " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:339 msgid " available." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:329 +#: ../src/backend/filters/dataLoad.cpp:347 msgid "Loaded entire dataset, " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:329 -#: ../src/backend/filters/dataLoad.cpp:428 +#: ../src/backend/filters/dataLoad.cpp:347 +#: ../src/backend/filters/dataLoad.cpp:446 +#: ../src/backend/filters/dataLoad.cpp:468 +#: ../src/backend/filters/dataLoad.cpp:486 msgid " points." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:373 +#: ../src/backend/filters/dataLoad.cpp:391 msgid "" "Data file contained incorrect number of columns -- should be 3 or 4, was " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:427 +#: ../src/backend/filters/dataLoad.cpp:445 +#: ../src/backend/filters/dataLoad.cpp:467 +#: ../src/backend/filters/dataLoad.cpp:485 msgid "Loaded dataset, " msgstr "" -#: ../src/backend/filters/dataLoad.cpp:460 +#: ../src/backend/filters/dataLoad.cpp:517 msgid "" "Warning:One or more bounds of the loaded data approaches the limits of " "numerical stability for the internal data type(magnitude too large). " @@ -4753,120 +4662,155 @@ "der numerischen Stabilität des internen Datentyps (Größenordnung zu groß). " "Erwägen Sie die Daten vor dem Laden zu skalieren. " -#: ../src/backend/filters/dataLoad.cpp:485 +#: ../src/backend/filters/dataLoad.cpp:541 +#: ../src/backend/filters/dataLoad.cpp:562 +#: ../src/backend/filters/rangeFile.cpp:561 +#: ../src/backend/filters/rangeFile.cpp:581 +msgid "File" +msgstr "Datei" + +#: ../src/backend/filters/dataLoad.cpp:542 msgid "File from which to load data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:488 +#: ../src/backend/filters/dataLoad.cpp:545 msgid "" -"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato)|*.xml;*.pos;*.txt;*.csv;*." -"ato|All Files|*" +"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)|*.xml;*.pos;*.txt;*." +"csv;*.ato;*.ops|All Files|*" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:498 +#: ../src/backend/filters/dataLoad.cpp:555 msgid "File type" msgstr "Dateityp" -#: ../src/backend/filters/dataLoad.cpp:500 +#: ../src/backend/filters/dataLoad.cpp:557 msgid "Type of file to be loaded" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:515 +#: ../src/backend/filters/dataLoad.cpp:572 msgid "Entries per point" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:516 +#: ../src/backend/filters/dataLoad.cpp:573 msgid "Number of decimal values in file per 3D point (normally 4)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:535 +#: ../src/backend/filters/dataLoad.cpp:590 +msgid "Relative offset of each entry in file for point's X position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:598 +msgid "Relative offset of each entry in file for point's Y position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:606 +msgid "Relative offset of each entry in file for point's Z position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:614 +msgid "" +"Relative offset of each entry in file to use for scalar value of 3D point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:630 msgid "File \"Endianness\"" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:536 +#: ../src/backend/filters/dataLoad.cpp:631 msgid "On-disk data storage format. If file won't load, just try each" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:561 -msgid "Relative offset of each entry in file for point's X position" +#: ../src/backend/filters/dataLoad.cpp:643 +msgid "Recon. Width" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:569 -msgid "Relative offset of each entry in file for point's Y position" +#: ../src/backend/filters/dataLoad.cpp:644 +msgid "" +"Width of box onto which to place reconstructed detector hits (similar to tip " +"radius)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:577 -msgid "Relative offset of each entry in file for point's Z position" +#: ../src/backend/filters/dataLoad.cpp:653 +msgid "Ion Volume" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:654 +msgid "Effective volume of an ion (incl. free packing volume)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:585 +#: ../src/backend/filters/dataLoad.cpp:662 +msgid "Det. Efficiency" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:663 msgid "" -"Relative offset of each entry in file to use for scalar value of 3D point" +"Effiency of system (ions evaporated towards detector/ions detected by " +"detector)" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:588 +#: ../src/backend/filters/dataLoad.cpp:677 msgid "Value Label" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:592 +#: ../src/backend/filters/dataLoad.cpp:681 msgid "Name for the scalar value associated with each point" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:595 +#: ../src/backend/filters/dataLoad.cpp:684 msgid "Format params." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:601 +#: ../src/backend/filters/dataLoad.cpp:690 msgid "Enabled" msgstr "Aktiviert" -#: ../src/backend/filters/dataLoad.cpp:605 +#: ../src/backend/filters/dataLoad.cpp:694 msgid "Load this file?" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:616 +#: ../src/backend/filters/dataLoad.cpp:705 msgid "Sample data" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:619 +#: ../src/backend/filters/dataLoad.cpp:708 msgid "" "Perform random selection on file contents, instead of loading entire file" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:626 +#: ../src/backend/filters/dataLoad.cpp:715 msgid "Load Limit (MB)" msgstr "Ladelimit (MB)" -#: ../src/backend/filters/dataLoad.cpp:629 +#: ../src/backend/filters/dataLoad.cpp:718 msgid "Limit for size of data to load" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:636 +#: ../src/backend/filters/dataLoad.cpp:725 msgid "Monitor" msgstr "Monitor" -#: ../src/backend/filters/dataLoad.cpp:640 +#: ../src/backend/filters/dataLoad.cpp:729 msgid "" "Watch file timestamp to track changes to file contents from other programs" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:644 +#: ../src/backend/filters/dataLoad.cpp:733 msgid "Load params." msgstr "" -#: ../src/backend/filters/dataLoad.cpp:651 +#: ../src/backend/filters/dataLoad.cpp:740 msgid "Default colour " msgstr "Bevorzugte Farbe " -#: ../src/backend/filters/dataLoad.cpp:654 +#: ../src/backend/filters/dataLoad.cpp:743 msgid "Default colour for points, if not overridden by other filters" msgstr "" -#: ../src/backend/filters/dataLoad.cpp:659 +#: ../src/backend/filters/dataLoad.cpp:748 msgid "Draw Size" msgstr "Draw Size" -#: ../src/backend/filters/dataLoad.cpp:662 +#: ../src/backend/filters/dataLoad.cpp:751 msgid "Default size for points, if not overridden by other filters" msgstr "" @@ -4878,521 +4822,728 @@ msgid "Max in limit" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:79 -msgid "Probability" -msgstr "" - -#: ../src/backend/filters/spectrumPlot.cpp:170 +#: ../src/backend/filters/spectrumPlot.cpp:171 msgid "Extrema" msgstr "Extrema" -#: ../src/backend/filters/spectrumPlot.cpp:219 +#: ../src/backend/filters/spectrumPlot.cpp:220 msgid "count" msgstr "Anzahl" -#: ../src/backend/filters/spectrumPlot.cpp:304 +#: ../src/backend/filters/spectrumPlot.cpp:305 msgid "Mixed data" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:445 +#: ../src/backend/filters/spectrumPlot.cpp:446 msgid "Background:" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:504 +#: ../src/backend/filters/spectrumPlot.cpp:505 msgid "Relative " msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:507 +#: ../src/backend/filters/spectrumPlot.cpp:508 msgid "Probability Density" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:584 +#: ../src/backend/filters/spectrumPlot.cpp:587 msgid "Step size for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:589 +#: ../src/backend/filters/spectrumPlot.cpp:592 msgid "Auto Min/max" msgstr "Auto Min/max" -#: ../src/backend/filters/spectrumPlot.cpp:593 +#: ../src/backend/filters/spectrumPlot.cpp:596 msgid "Automatically compute spectrum upper and lower bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:598 +#: ../src/backend/filters/spectrumPlot.cpp:601 msgid "Min" msgstr "Min" -#: ../src/backend/filters/spectrumPlot.cpp:601 +#: ../src/backend/filters/spectrumPlot.cpp:604 msgid "Starting position for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:606 +#: ../src/backend/filters/spectrumPlot.cpp:609 msgid "Max" msgstr "Max" -#: ../src/backend/filters/spectrumPlot.cpp:609 +#: ../src/backend/filters/spectrumPlot.cpp:612 msgid "Ending position for spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:617 +#: ../src/backend/filters/spectrumPlot.cpp:620 msgid "Logarithmic" msgstr "Logarithmisch" -#: ../src/backend/filters/spectrumPlot.cpp:620 +#: ../src/backend/filters/spectrumPlot.cpp:623 msgid "Convert the plot to logarithmic mode" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:632 +#: ../src/backend/filters/spectrumPlot.cpp:635 msgid "Normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:635 +#: ../src/backend/filters/spectrumPlot.cpp:638 msgid "Rescale the plot height, to make inter-spectrum comparisons easier" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:642 +#: ../src/backend/filters/spectrumPlot.cpp:645 msgid "Lower Bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:646 +#: ../src/backend/filters/spectrumPlot.cpp:649 msgid "Do not use data below this x-value for normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:650 +#: ../src/backend/filters/spectrumPlot.cpp:653 msgid "Upper Bound" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:654 +#: ../src/backend/filters/spectrumPlot.cpp:657 msgid "Do not use data above this x-value for normalisation" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:672 +#: ../src/backend/filters/spectrumPlot.cpp:675 msgid "Visual style of plot" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:679 +#: ../src/backend/filters/spectrumPlot.cpp:682 msgid "Colour of plotted spectrum" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:694 +#: ../src/backend/filters/spectrumPlot.cpp:697 msgid "Model" msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:697 -msgid "Fitting method to use" -msgstr "" +#: ../src/backend/filters/spectrumPlot.cpp:700 +msgid "Fitting method to use" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:711 +msgid "Fit Start" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:712 +msgid "Start mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:718 +msgid "Fit End" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:719 +msgid "End mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:732 +msgid "Corr. Only" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:733 +msgid "Only show corrected spectrum, not fit" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:741 +msgid "Background Mode" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:121 +#: ../src/backend/filters/rangeFile.h:96 +msgid "Ranging" +msgstr "Ranging" + +#: ../src/backend/filters/rangeFile.cpp:564 +msgid "File to use for range data" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:574 +msgid "Drop unranged" +msgstr "Nicht gerangete ausschalten" + +#: ../src/backend/filters/rangeFile.cpp:576 +msgid "Remove unranged points when generating output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:586 +msgid "Legend" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:588 +msgid "Display colour legend for enabled ions" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:592 +msgid "View" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:608 +msgid "All Ions" +msgstr "Alle Ionen" + +#: ../src/backend/filters/rangeFile.cpp:609 +msgid "Enable/disable all ions at once" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:617 +msgid "Species" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:624 +msgid "IonID " +msgstr "IonID " + +#: ../src/backend/filters/rangeFile.cpp:625 +msgid "Enable/disable specified ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:635 +msgid "Active Ion " +msgstr "Actives Ion " + +#: ../src/backend/filters/rangeFile.cpp:637 +msgid "If true, ion is used in output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:647 +msgid "Colour " +msgstr "Farbe" + +#: ../src/backend/filters/rangeFile.cpp:651 +msgid "Colour used to represent ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:674 +msgid "All Ranges" +msgstr "Alle Range" + +#: ../src/backend/filters/rangeFile.cpp:675 +msgid "Enable/disable all ranges" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:690 +msgid "Active Rng " +msgstr "Activer Rng " + +#: ../src/backend/filters/rangeFile.cpp:693 +msgid "" +"Enable/disable specified range (ion must also be enabled to activiate range)" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:697 +msgid "Ion " +msgstr "Ion " + +#: ../src/backend/filters/rangeFile.cpp:700 +msgid "Name of ion associate to this range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:709 +msgid "Start rng " +msgstr "Start rng " + +#: ../src/backend/filters/rangeFile.cpp:712 +msgid "Start value for range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:717 +msgid "End rng " +msgstr "End rng " + +#: ../src/backend/filters/rangeFile.cpp:720 +msgid "Stopping value for range`" +msgstr "" + +#: ../src/backend/state.cpp:165 +msgid "" +"This file is a \"state\" file for the 3Depict program, and stores " +"information about a particular analysis session. This file should be a valid " +"\"XML\" file" +msgstr "" +"Diese Datei ist ein \"Status\" Datei für das Programm 3Depict. Sie speichert " +"Informationen über die jeweiligen Analysesitzung. Dies sollte ein gültige " +"\"XML\" Datei sein." + +#: ../src/backend/state.cpp:337 +msgid "Failed to allocate parser" +msgstr "Kann Parser nicht zuordnen" + +#: ../src/backend/state.cpp:372 +msgid "" +"Unable to retrieve root node in input state file... Is this really a non-" +"empty XML file?" +msgstr "" + +#: ../src/backend/state.cpp:379 +msgid "Base state node missing. Is this really a state XML file??" +msgstr "" + +#: ../src/backend/state.cpp:408 +msgid "State was created by a newer version of this program.. " +msgstr "Status wurde von einer neueren Version dieses Programmes erstellt.. " + +#: ../src/backend/state.cpp:409 +msgid "file reading will continue, but may fail." +msgstr "Datei wird weiter eingelesen kann aber unter Umständen fehlschlagen." + +#: ../src/backend/state.cpp:419 +msgid "" +"Warning, unparseable version number in state file. File reading will " +"continue, but may fail" +msgstr "" +"Warnung: Nicht lesbare Versionsnummer in Statusdatei. Datei wird weiter " +"eingelesen kann aber unter Umständen fehlschlagen." + +#: ../src/backend/state.cpp:428 +msgid "Unable to find the \"writer\" node" +msgstr "Kann \"writer\" node nicht finden" + +#: ../src/backend/state.cpp:438 +msgid "Unable to find the \"backcolour\" node." +msgstr "Unable to find the \"backcolour\" node." + +#: ../src/backend/state.cpp:445 +msgid "\"backcolour\" node missing \"r\" value." +msgstr "\"backcolour\" node fehlt \"r\" Wert." + +#: ../src/backend/state.cpp:450 +msgid "Unable to interpret \"backColour\" node's \"r\" value." +msgstr "Kann \"backColour\" node's \"r\" Wert nicht interpretieren." + +#: ../src/backend/state.cpp:458 +msgid "\"backcolour\" node missing \"g\" value." +msgstr "\"backcolour\" node fehlt \"g\" Wert." + +#: ../src/backend/state.cpp:464 +msgid "Unable to interpret \"backColour\" node's \"g\" value." +msgstr "Kann \"backColour\" node's \"g\" Wert nicht interpretieren." + +#: ../src/backend/state.cpp:472 +msgid "\"backcolour\" node missing \"b\" value." +msgstr "\"backcolour\" node fehlt \"b\" Wert." + +#: ../src/backend/state.cpp:478 +msgid "Unable to interpret \"backColour\" node's \"b\" value." +msgstr "Kann \"backColour\" node's \"b\" Wert nicht interpretieren." + +#: ../src/backend/state.cpp:485 +msgid "\"backcolour\"s rgb values must be in range [0,1]" +msgstr "\"backcolour\"s rgb Wert muss im Bereich [0,1] liegen" + +#: ../src/backend/state.cpp:513 +msgid "Unable to find or interpret \"showaxis\" node" +msgstr "Kann \"showaxis\" node nicht interpretieren" + +#: ../src/backend/state.cpp:557 +msgid "Unable to locate \"filtertree\" node." +msgstr "Kann \"filtertree\" node nicht finden." + +#: ../src/backend/state.cpp:573 +msgid "Cameras section missing \"active\" node." +msgstr "Cameras section fehlt \"active\" node." -#: ../src/backend/filters/spectrumPlot.cpp:708 -msgid "Fit Start" -msgstr "" +#: ../src/backend/state.cpp:581 +msgid "Unable to find property \"value\" for \"cameras->active\" node." +msgstr "Kann \"Eigenschaftswert\" für \"Kamera->aktiv\" Node nicht finden." -#: ../src/backend/filters/spectrumPlot.cpp:709 -msgid "Start mass value for fitting background" +#: ../src/backend/state.cpp:587 +msgid "Unable to interpret property \"value\" for \"cameras->active\" node." msgstr "" +"Kann \"Eigenschaftswert\" für \"Kamera->aktiv\" Node nicht interpretieren." -#: ../src/backend/filters/spectrumPlot.cpp:715 -msgid "Fit End" +#: ../src/backend/state.cpp:607 +msgid "Failed to interpret camera state for camera : " msgstr "" -#: ../src/backend/filters/spectrumPlot.cpp:716 -msgid "End mass value for fitting background" -msgstr "" +#: ../src/backend/state.cpp:615 +msgid "Unable to interpret the camera type for camera : " +msgstr "Kann den Kameratype nicht interpretieren für :" -#: ../src/backend/filters/spectrumPlot.cpp:729 -msgid "Corr. Only" -msgstr "" +#: ../src/backend/state.cpp:671 +msgid "Unable to locate stash name for stash " +msgstr "Kann den Stashnamen für Stash nicht finden" -#: ../src/backend/filters/spectrumPlot.cpp:730 -msgid "Only show corrected spectrum, not fit" -msgstr "" +#: ../src/backend/state.cpp:678 +msgid "Empty stash name for stash " +msgstr "Leerer Stashname für Stash" -#: ../src/backend/filters/spectrumPlot.cpp:738 -msgid "Background Mode" +#: ../src/backend/state.cpp:687 +msgid "No filter tree for stash:" msgstr "" -#: ../src/backend/configFile.cpp:187 -msgid "Config file present, but is not valid (root node test)" -msgstr "Konfigurationsdatei vorhanden, aber nicht gültig (root node test)" +#: ../src/backend/state.cpp:693 +msgid "For stash " +msgstr "Für Stash " -#: ../src/backend/configFile.cpp:228 -msgid "Unable to interpret recent file entry" -msgstr "Kann den letzten Dateieintrag nicht interpretieren" +#: ../src/backend/state.cpp:725 +msgid "Unrecognised effect :" +msgstr "Nichterkannter Effekt :" -#: ../src/backend/configFile.cpp:268 -msgid "Unable to determine filter type in defaults listing." -msgstr "Kann den Filtertyp im Defaultslisting nicht bestimmen." +#: ../src/backend/state.cpp:735 +msgid "Duplicate effect found" +msgstr "Doppelter Effekt gefunden" -#: ../src/backend/configFile.cpp:605 -msgid "Online access for non win32/apple platforms is intentionally disabled, " -msgstr "" -"Onlinezugang für nicht Win32/apple systeme wurde absichtlich deaktiviert." +#: ../src/backend/state.cpp:735 +msgid " cannot use." +msgstr "kann nicht verwenden." -#: ../src/backend/configFile.cpp:606 -msgid "" -"regardless of the settings you use here. Use your package manager to keep up-" -"to-date" +#: ../src/backend/state.cpp:745 +msgid "Error reading effect : " +msgstr "Fehler beim Lesen:" + +#: ../src/backend/state.cpp:965 +msgid "-merge" msgstr "" -"Nutzen Sie Ihren Paketmanager um up-to-date zu sein unabhängig von den " -"Einstellungen die Sie hier verwenden" -#: ../src/backend/filtertreeAnalyse.cpp:223 +#: ../src/backend/filtertreeAnalyse.cpp:225 msgid "" "Parent filter has no output, but filter requires input -- there is no point " "in placing a child filter here." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:224 +#: ../src/backend/filtertreeAnalyse.cpp:226 msgid "Leaf-only filter with child" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:234 +#: ../src/backend/filtertreeAnalyse.cpp:236 msgid "" "Parent filters' output will be blocked by child, without use. Parent results " "will be dropped." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:235 -#: ../src/backend/filtertreeAnalyse.cpp:249 +#: ../src/backend/filtertreeAnalyse.cpp:237 +#: ../src/backend/filtertreeAnalyse.cpp:251 msgid "Bad parent->child pair" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:248 +#: ../src/backend/filtertreeAnalyse.cpp:250 msgid "" "First filter does not output anything useable by child filter. Child filter " "not useful." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:328 +#: ../src/backend/filtertreeAnalyse.cpp:330 msgid "Spatial results possibly altered" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:329 +#: ../src/backend/filtertreeAnalyse.cpp:331 msgid "" "Filters and settings selected that could alter reported results that depend " "upon density. Check to see if spatial sampling may be happening in the " "filter tree - this warning is provisional only." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:397 +#: ../src/backend/filtertreeAnalyse.cpp:399 msgid "Filter needs parent \"" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:398 +#: ../src/backend/filtertreeAnalyse.cpp:400 msgid "" "\" but does not have one. Filter may not function correctly until this " "parent is given." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:399 +#: ../src/backend/filtertreeAnalyse.cpp:401 msgid "Filter missing needed parent" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:430 +#: ../src/backend/filtertreeAnalyse.cpp:432 msgid "Bad range filter settings" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:431 +#: ../src/backend/filtertreeAnalyse.cpp:433 msgid "" "Rangefile set to drop unranged data, however a child filter requires it." msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:613 +#: ../src/backend/filtertreeAnalyse.cpp:529 +msgid "Filter cannot generate data, but has no input - it is at the tree base." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:530 +msgid "Non data-generating filter at root" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:632 msgid "Composition results possibly altered" msgstr "" -#: ../src/backend/filtertreeAnalyse.cpp:614 +#: ../src/backend/filtertreeAnalyse.cpp:633 msgid "" "Filters and settings selected that could bias reported composition. Check to " "see if species biasing may occcur in the filter tree - this warning is " "provisional only." msgstr "" -#: ../src/backend/plot.cpp:29 -msgid "Moving avg." -msgstr "Gleit.Durchschn." - -#: ../src/backend/plot.cpp:33 -msgid "Lines" -msgstr "Linien" - -#: ../src/backend/plot.cpp:34 -msgid "Bars" -msgstr "Block" - -#: ../src/backend/plot.cpp:35 -msgid "Steps" -msgstr "Stufen" - -#: ../src/backend/plot.cpp:36 -msgid "Stem" -msgstr "Stem" - -#: ../src/backend/plot.cpp:37 -msgid "Points" -msgstr "Punkte" - -#: ../src/backend/plot.cpp:39 -msgid "Density" -msgstr "" +#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 +#: ../src/backend/APT/APTFileIO.cpp:103 ../src/backend/APT/APTFileIO.cpp:123 +msgid "Error opening file" +msgstr "Fehler beim Öffnen der Datei" -#: ../src/backend/plot.cpp:40 -msgid "Scatter" +#: ../src/backend/APT/APTFileIO.cpp:45 +msgid "Only found header, no data" msgstr "" -#: ../src/backend/plot.cpp:739 ../src/backend/plot.cpp:747 -msgid "Multiple data types" +#: ../src/backend/APT/APTFileIO.cpp:46 +msgid "Unable to reopen file after first scan" msgstr "" -#: ../src/backend/plot.cpp:1581 -msgid "error" -msgstr "Fehler" +#: ../src/backend/APT/APTFileIO.cpp:47 +msgid "Error whilst reading file contents" +msgstr "Fehler beim Lesen des Dateiinhaltes" -#: ../src/backend/plot.cpp:1821 -msgid "Amplitude" +#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 +msgid "Unexpected file format" msgstr "" -#: ../src/backend/filtertree.cpp:1151 -msgid "WARNING: Skipping node " -msgstr "WARNUNG: Skipping node " - -#: ../src/backend/filtertree.cpp:1151 -msgid " as it was not recognised" -msgstr " wurde nicht erkannt." - -#: ../src/backend/filtertree.cpp:1189 -msgid "Error processing node: " -msgstr "Fehler beim Verarbeiten von Node: " - -#: ../src/gl/cameras.cpp:596 -msgid "Lock" -msgstr "Sperren" - -#: ../src/gl/cameras.cpp:617 -msgid "Up Dir." -msgstr "Up Dir." - -#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 -msgid "Perspective" -msgstr "Perspektivisch" - -#: ../src/gl/cameras.cpp:631 -msgid "Projection" -msgstr "Projektion" - -#: ../src/gl/cameras.cpp:640 -msgid "Field of View (deg)" -msgstr "Bildausschnitt" +#: ../src/backend/APT/APTFileIO.cpp:50 +msgid "Insufficient memory to continue" +msgstr "" -#: ../src/gl/cameras.cpp:646 -msgid "View size" -msgstr "Anzeigegröße" +#: ../src/backend/APT/APTFileIO.cpp:54 +msgid "Memory allocation failure on POS load" +msgstr "Speicherzuweisungsfeher beim Laden der pos-Datei" -#: ../src/3Depict.cpp:397 -msgid "File : " -msgstr "Datei : " +#: ../src/backend/APT/APTFileIO.cpp:55 +msgid "Error opening pos file" +msgstr "Fehler beim Öffnen der pos-Datei" -#: ../src/3Depict.cpp:397 -msgid " does not exist. Skipping" -msgstr " existiert nicht. Überspringe" +#: ../src/backend/APT/APTFileIO.cpp:56 +msgid "Pos file empty" +msgstr "Pos-Datei ist leer" -#: ../src/common/constants.cpp:22 -msgid "" -"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " -"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." -"rrng)|*.rrng;*.RRNG|All Files (*)|*" +#: ../src/backend/APT/APTFileIO.cpp:57 +msgid "Pos file size appears to have non-integer number of entries" msgstr "" +"Pos-Dateigröße scheint eine nicht ganzzahlige Anzahl an Einträgen zu haben" -#: ../src/common/basics.cpp:183 -msgid "in the future?" -msgstr "in Zukunft?" +#: ../src/backend/APT/APTFileIO.cpp:58 +msgid "Error reading from pos file (after open)" +msgstr "Fehler beim Lesen aus pos-Datei (nach dem öffnen)" -#: ../src/common/basics.cpp:234 -msgid "a decade ago" -msgstr "vor zehn Jahren" +#: ../src/backend/APT/APTFileIO.cpp:59 +msgid "Error - Found NaN in pos file" +msgstr "Fehler - Fand NaN in pos-Datei" -#: ../src/common/basics.cpp:235 -msgid "a year ago" -msgstr "vor einem Jahr" +#: ../src/backend/APT/APTFileIO.cpp:60 +msgid "Error - Found Inf in pos file" +msgstr "" -#: ../src/common/basics.cpp:236 -msgid "a month ago" -msgstr "vor einem Monat" +#: ../src/backend/APT/APTFileIO.cpp:61 +msgid "Pos load aborted by interrupt." +msgstr "Pos laden durch Interrupt abgebrochen." -#: ../src/common/basics.cpp:237 -msgid "a week ago" -msgstr "vor einer Woche" +#: ../src/backend/APT/APTFileIO.cpp:80 +msgid "No numerical data found" +msgstr "Keine numerischen Daten gefunden" -#: ../src/common/basics.cpp:238 -msgid "a day ago" -msgstr "gestern" +#: ../src/backend/APT/APTFileIO.cpp:81 +msgid "Error re-opening file, after first scan" +msgstr "Fehler beim nochmaligen Öffnen der Datei nach dem ersten Scan" -#: ../src/common/basics.cpp:239 -msgid "an hour ago" -msgstr "vor einer Stunde" +#: ../src/backend/APT/APTFileIO.cpp:82 +msgid "Unable to read file contents after open" +msgstr "Kann den Dateiinhalt nach dem Öffnen nich lesen" -#: ../src/common/basics.cpp:240 -msgid "45 minutes ago" -msgstr "vor 45 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:83 +msgid "Error interpreting field in file" +msgstr "Fehler beim Interpretieren eine Feldes in der Datei" -#: ../src/common/basics.cpp:241 -msgid "30 minutes ago" -msgstr "vor 30 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:84 +msgid "Incorrect number of fields in file" +msgstr "Die Datei enthält eine falsche Anzahl von Feldern" -#: ../src/common/basics.cpp:242 -msgid "20 minutes ago" -msgstr "vor 20 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 +msgid "Unable to allocate memory to store data" +msgstr "Kann Speicher nicht zuordnen" -#: ../src/common/basics.cpp:243 -msgid "15 minutes ago" -msgstr "vor 15 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:104 +msgid "File is empty" +msgstr "" -#: ../src/common/basics.cpp:244 -msgid "10 minutes ago" -msgstr "vor 10 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:105 +msgid "Filesize does not match expected format" +msgstr "" -#: ../src/common/basics.cpp:245 -msgid "5 minutes ago" -msgstr "vor 5 Minuten" +#: ../src/backend/APT/APTFileIO.cpp:106 +msgid "File version number not <4, as expected" +msgstr "" -#: ../src/common/basics.cpp:246 -msgid "a minute ago" -msgstr "vor einer Minute" +#: ../src/backend/APT/APTFileIO.cpp:108 +msgid "Unable to detect endian-ness in file" +msgstr "" -#: ../src/common/basics.cpp:247 -msgid "30 seconds ago" -msgstr "vor 30 Sekunden" +#: ../src/backend/APT/APTFileIO.cpp:122 +msgid "Error interpreting file contents" +msgstr "" -#: ../src/common/basics.cpp:248 -msgid "10 seconds ago" -msgstr "vor 10 Sekunden" +#: ../src/backend/APT/APTFileIO.cpp:124 +msgid "Aborted opening file" +msgstr "" -#: ../src/common/basics.cpp:249 -msgid "a second ago" -msgstr "vor einer Sekunde" +#: ../src/backend/APT/APTRanges.cpp:48 +msgid "Error opening file, check name and permissions." +msgstr "Fehler beim Öffnen der Datei, überprüfe Namen und Berechtigungen." -#: ../src/common/basics.cpp:254 -msgid "a few decades ago" -msgstr "vor einigen Dekaden" +#: ../src/backend/APT/APTRanges.cpp:49 +msgid "" +"Error interpreting range file header, expecting ion count and range count, " +"respectively." +msgstr "" +"Fehler beim Rangedatei interpretieren, erwarte Ionenanzahl bzw. Rangeanzahl." -#: ../src/common/basics.cpp:255 -msgid "a few years ago" -msgstr "vor einigen Jahren" +#: ../src/backend/APT/APTRanges.cpp:50 +msgid "" +"Range file appears to be empty, check file is a proper range file and is not " +"empty." +msgstr "" +"Rangedatei scheint leer zu sein. Prüfe ob die Datei wirklich ein Rangedatei " +"und nicht leer ist." -#: ../src/common/basics.cpp:256 -msgid "a few months ago" -msgstr "vor einigen Monaten" +#: ../src/backend/APT/APTRanges.cpp:51 +msgid "Error reading the long name for ion." +msgstr "Fehler beim Lesen des langen Namens für Ion." -#: ../src/common/basics.cpp:257 -msgid "a few weeks ago" -msgstr "vor einigen Wochen" +#: ../src/backend/APT/APTRanges.cpp:52 +msgid "Error reading the short name for ion." +msgstr "Fehler beim Lesen des kurzen Namens für Ion." -#: ../src/common/basics.cpp:258 -msgid "a few days ago" -msgstr "vor einigen Tagen" +#: ../src/backend/APT/APTRanges.cpp:53 +msgid "" +"Error reading colour data in the file, expecting 3 decimal values, space " +"separated." +msgstr "" +"Fehler beim Lesen der Farbinformationen in der Datei. Erwarte 3, durch " +"Leerzeichen getrennte, Dezimalwerte." -#: ../src/common/basics.cpp:259 -msgid "a few hours ago" -msgstr "vor einigen Stunden" +#: ../src/backend/APT/APTRanges.cpp:54 +msgid "" +"Tried skipping to table separator line (line with dashes), but did not find " +"it." +msgstr "" -#: ../src/common/basics.cpp:266 -msgid "a few minutes ago" -msgstr "vor einigen Minuten" +#: ../src/backend/APT/APTRanges.cpp:55 +msgid "" +"Number of ions in the table header did not match the number specified at the " +"start of the file" +msgstr "" -#: ../src/common/basics.cpp:269 -msgid "a few seconds ago" -msgstr "vor einigen Sekunden" +#: ../src/backend/APT/APTRanges.cpp:56 +msgid "" +"Unexpected failure whilst trying to skip over range lead-in data (bit before " +"range start value)" +msgstr "" -#: ../src/common/basics.cpp:296 -msgid "moments ago" -msgstr "kürzlich" +#: ../src/backend/APT/APTRanges.cpp:57 +msgid "" +"Range table had an incorrect number of entries, should be 2 or 3 + number of " +"ranges" +msgstr "" -#: ../src/common/colourmap.cpp:242 -msgid "Jet" -msgstr "Jet" +#: ../src/backend/APT/APTRanges.cpp:58 +msgid "Unable to read range start and end values" +msgstr "Kann Anfangs und Endwert des Range nicht lesen" -#: ../src/common/colourmap.cpp:243 -msgid "Hot" -msgstr "Heiss" +#: ../src/backend/APT/APTRanges.cpp:59 +msgid "Unable to read range table entry" +msgstr "Kann Rangetabelleneintrag nich lesen" -#: ../src/common/colourmap.cpp:244 -msgid "Cold" -msgstr "Kalt" +#: ../src/backend/APT/APTRanges.cpp:60 +msgid "" +"Error reading file, unexpected format, are you sure it is a proper range " +"file?" +msgstr "" +"Fehler beim Lesen der Datei: Unerwartetes Format, sind Sie sicher, dass dies " +"eine korrekte Rangedatei ist?" -#: ../src/common/colourmap.cpp:245 -msgid "Grey" -msgstr "Grau" +#: ../src/backend/APT/APTRanges.cpp:61 +msgid "" +"Too many ranges appeared to have range entries with no usable data (eg, all " +"blank)" +msgstr "Zu viele Ranges scheinen ungültige Einträge zu haben (z.B. alle leer)" -#: ../src/common/colourmap.cpp:246 -msgid "Cyclic" -msgstr "Cyclic" +#: ../src/backend/APT/APTRanges.cpp:62 +msgid "" +"Range file appears to contain malformed data, check things like start and " +"ends of m/c are not equal or flipped." +msgstr "" -#: ../src/common/colourmap.cpp:247 -msgid "General" -msgstr "Allgemein" +#: ../src/backend/APT/APTRanges.cpp:63 +msgid "Range file appears to be inconsistent (eg, overlapping ranges)" +msgstr "Rangedatei schein inkonsistent zu sein (z.B. überlappende Ranges)" -#: ../src/common/colourmap.cpp:248 -msgid "Blue" -msgstr "Blau" +#: ../src/backend/APT/APTRanges.cpp:64 +msgid "No ion name mapping found for multiple ion." +msgstr "" -#: ../src/common/colourmap.cpp:249 -msgid "Pseudo-Random" -msgstr "Pseudo-Random" +#: ../src/backend/APT/APTRanges.cpp:65 +msgid "Polyatomic extension range matches multiple masses in first section" +msgstr "" -#: ../src/wx/wxcomponents.cpp:191 -msgid "Save Data..." -msgstr "Datei speichern..." +#: ../src/backend/APT/APTRanges.cpp:66 +msgid "Range file is exceedingly large. Refusing to open" +msgstr "" -#: ../src/wx/wxcomponents.cpp:192 -msgid "Text File (*.txt)|*.txt|All Files (*)|*" -msgstr "Text Datei (*.txt)|*.txt|Alle Dateien (*)|*" +#: ../src/backend/APT/APTRanges.cpp:1404 +msgid "" +"Range headings do not match order of the ions listed in the name " +"specifications. The name specification ordering will be used when reading " +"the range table, as the range heading section is declared as a comment in " +"the file-format specifications, and is not to be intepreted by this program. " +"Check range-species associations actually match what you expect." +msgstr "" -#: ../src/wx/wxcomponents.cpp:204 -msgid "Error saving file. Check output dir is writable." +#: ../src/backend/filter.cpp:54 +msgid "2D Plot" msgstr "" -"Fehler beim Schreiben der Datei. Stellen Sie sicher, dass das " -"Zielverzeichnis nicht schreibgeschüzt ist." -#: ../src/backend/filters/dataLoad.h:135 -msgid "Pos Data" -msgstr "POS-Daten" +#: ../src/backend/filter.cpp:56 +msgid "Range" +msgstr "Range" -#: ../src/backend/filters/ionInfo.h:103 -msgid "Ion info" -msgstr "Ioneninfo" +#: ../src/backend/filter.cpp:57 +msgid "Voxel" +msgstr "Voxel" -#: ../src/backend/filters/externalProgram.h:69 -msgid "Ext. Program" -msgstr "Ext. Programm" +#: ../src/backend/filters/transform.h:71 +msgid "Ion. Transform" +msgstr "Ion. Transformieren" -#: ../src/backend/filters/ionColour.h:63 +#: ../src/backend/filters/ionColour.h:66 msgid "Spectral Colour" msgstr "Spectral Farbe" -#: ../src/backend/filters/profile.h:123 -msgid "Comp. Prof." -msgstr "Konz. Prof." +#: ../src/backend/filters/boundingBox.h:76 +msgid "Bound box" +msgstr "Begrenzungs-Box" #: ../src/backend/filters/ionDownsample.h:79 msgid "Ion Sampler" msgstr "Ion Sampler" -#: ../src/backend/filters/boundingBox.h:76 -msgid "Bound box" -msgstr "Begrenzungs-Box" +#: ../src/backend/filters/profile.h:123 +msgid "Comp. Prof." +msgstr "Konz. Prof." -#: ../src/backend/filters/transform.h:71 -msgid "Ion. Transform" -msgstr "Ion. Transformieren" +#: ../src/backend/filters/ionInfo.h:103 +msgid "Ion info" +msgstr "Ioneninfo" -#: ../src/wx/wxcomponents.h:82 -msgid "treeCtrl" -msgstr "" +#: ../src/backend/filters/dataLoad.h:145 +msgid "Pos Data" +msgstr "POS-Daten" + +#: ../src/backend/filters/externalProgram.h:69 +msgid "Ext. Program" +msgstr "Ext. Programm" #: ../data/startup-tips.txt:5 msgid "" "You can reset the main view by tapping the space bar. Hold down modifier " "keys like shift,ctrl to change the axis. Double tap to switch which axis to " -"look down" +"look the other way (+ve or -ve direction)" msgstr "" #: ../data/startup-tips.txt:6 @@ -5409,7 +5560,8 @@ #: ../data/startup-tips.txt:8 msgid "" "Package files can be easily shared to allow others to view your analysis, " -"using the File->Export->Package menu item" +"using the File->Export->Package menu item. This will automatically import " +"all referenced files (eg pos/rng files) into a single shareable folder" msgstr "" #: ../data/startup-tips.txt:9 @@ -5448,12 +5600,13 @@ #: ../data/startup-tips.txt:15 msgid "" "That anyone can contribute to improving this program, even without knowing " -"about computer programming?" +"about computer programming? Reporting bugs helps us to prioritise our work, " +"and directs us to fix real problems for all users" msgstr "" #: ../data/startup-tips.txt:16 msgid "" -"You can load more than one file at a time, then either operate on the " +"You can load more than one file at a time, then either operate on them " "separately, or together" msgstr "" @@ -5493,8 +5646,8 @@ #: ../data/startup-tips.txt:23 msgid "" -"By creating a camera, you can switch between orthographic and perspective " -"views" +"By creating a camera, you can switch between orthographic (parallel) and " +"perspective views" msgstr "" #: ../data/startup-tips.txt:24 @@ -5503,191 +5656,29 @@ "translating (shifting) one of the datasets to one side" msgstr "" -#~ msgid "ORNL format RNG (*.rng)|*.rng|All Files (*)|*" -#~ msgstr "ORNL Format RNG (*.rng)|*.rng|Alle Dateien (*)|*" - -#~ msgid "POS Data (*.pos)|*.pos|All Files (*)|*" -#~ msgstr "POS-Daten (*.pos)|*.pos|All Files (*)|*" - -#~ msgid "Mass-to-Charge (amu/e)" -#~ msgstr "Masse-zu-Ladung (amu/e)" - -#~ msgid "Last Outputs" -#~ msgstr "Letzte Ausgabe" - -#~ msgid "Type" -#~ msgstr "Type" - -#~ msgid "Num" -#~ msgstr "Num" - -#~ msgid "Aborted." -#~ msgstr "Abgebrochen" - -#~ msgid "Gaussian (2𝜎)" -#~ msgstr "Gauss (2𝜎)" - -#~ msgid "Zero" -#~ msgstr "Null" - -#~ msgid "Bounce" -#~ msgstr "Bounce" - -#~ msgid "Kernel Bins" -#~ msgstr "Kernel Bins" - -#~ msgid "Exterior values" -#~ msgstr "Exterior values" - -#~ msgid "Inconsistent number of columns found" -#~ msgstr "Inkonsistente Anzahl an Spalten gefunden" - -#~ msgid "Tile " -#~ msgstr "Tile " - -#~ msgid "Filter Defaults" -#~ msgstr "Filtervoreinstellungen" - -#~ msgid "Notice" -#~ msgstr "Notiz" - -#~ msgid "For security reasons, defaults are not modifiable for this filter" -#~ msgstr "" -#~ "Aus Sicherheitsgründen können die Voreinstellungen für diesen Filter " -#~ "nicht geändert werden." - -#~ msgid "Pref" -#~ msgstr "Pref" - -#~ msgid "New stash name...." -#~ msgstr "Neuer Stashname..." - -#~ msgid "" -#~ "Range Files (*rng; *env; *rrng)|*rng;*env;*rrng|RNG File (*.rng)|*.rng|" -#~ "Environment File (*.env)|*.env|RRNG Files (*.rrng)|*.rrng|All Files (*)|*" -#~ msgstr "" -#~ "Rangedatei (*rng; *env; *rrng)|*rng;*env;*rrng|RNG File (*.rng)|*.rng|" -#~ "Environment Datei (*.env)|*.env|RRNG Files (*.rrng)|*.rrng|Alle Dateien " -#~ "(*)|*" - -#~ msgid "Next Fullscreen mode: none" -#~ msgstr "Nächster Vollbildmodus: keiner" - -#~ msgid "Next Fullscreen mode: complete" -#~ msgstr "Nächster Vollbildmodus: vollständig" - -#~ msgid "Next Fullscreen mode: with toolbars" -#~ msgstr "Nächster Vollbildmodus: mit Werkzeugleisten" - -#~ msgid "Next Mode: No fullscreen" -#~ msgstr "Nächster Modus: Kein Vollbild" - -#~ msgid "Next Mode: fullscreen w/o toolbar" -#~ msgstr "Nächster Modus: Vollbild ohne Werkzeugleiste" - -#~ msgid "Next Mode: fullscreen with toolbar" -#~ msgstr "Nächster Modus: Vollbild mit Werkzeugleiste" - -#~ msgid "displays this message" -#~ msgstr "zeigt diese Nachricht" - -#~ msgid "inputfile" -#~ msgstr "Eingabedatei" - -#~ msgid "Error processing command line" -#~ msgstr "Fehler beim Ausführen der Kommandozeile" - -#~ msgid "Unable to set working directory" -#~ msgstr "Kann Arbeitsverzeichnis nicht festlegen" - -#~ msgid "Error saving posfile result for external program" -#~ msgstr "Fehler beim Speichern von Posdateiergebnis für externes Programm" - -#~ msgid "Error saving plot result for externalprogram" -#~ msgstr "Fehler beim Speichern von Posdateiergebnis für externes Programm" - -#~ msgid "Error creating temporary directory" -#~ msgstr "Fehler beim Anlegen des temporären Verzeichnisses" - -#~ msgid "Detected unusable number of columns in plot" -#~ msgstr "Detected unusable number of columns in plot" - -#~ msgid "Unable to parse plot result from external program" -#~ msgstr "Unable to parse plot result from external program" - -#~ msgid "Unable to load ions from external program" -#~ msgstr "Kann Ionen von externem Programm nicht laden" - -#~ msgid "Unable to perform commandline substitution" -#~ msgstr "Unable to perform commandline substitution" - -#~ msgid "Error executing external program" -#~ msgstr "Fehler beim Ausführen von externem Programm" - -#~ msgid "Clustering aborted" -#~ msgstr "Clustering abgebrochen" - -#~ msgid "No core ions for cluster" -#~ msgstr "Keine Kernionen für Cluster" - -#~ msgid "No bulk ions for cluster" -#~ msgstr "Keine Bulkionen für Cluster" - -#~ msgid "Voxelisation aborted" -#~ msgstr "Voxelisation abgebrochen" - -#~ msgid "Out of memory" -#~ msgstr "Zu wenig Speicher" - -#~ msgid "Unable to perform filter convolution" -#~ msgstr "Kann Filter convolution nicht durchführen" - -#~ msgid "Voxelisation bounds are invalid" -#~ msgstr "Voxelisation Grenzen sin ungültig" - -#~ msgid "Too many bins in comp. profile." -#~ msgstr "Zu viele Bins im Konzentrationsprofil." - -#~ msgid "Not enough memory for comp. profile." -#~ msgstr "Nicht genug Speicher für Konz.-Profil." - -#~ msgid "Aborted composition prof." -#~ msgstr "Konzentrationspr. abgebr." - -#~ msgid "Insufficient data to complete analysis." -#~ msgstr "Ungenügend Daten zum Fertigstellen der Analyse." - -#~ msgid "Unable to allocate memory" -#~ msgstr "Kann Speicher nicht zuweisen" - -#~ msgid "Downsample Aborted" -#~ msgstr "Datenreduktion abgebrochen" - -#~ msgid "Insuffient memory for downsample" -#~ msgstr "Nicht genug Speicher zur Datenreduktion" - -#~ msgid "Insufficient memory for operation" -#~ msgstr "Nicht genügend Speicher für Operation" - -#~ msgid "Bug? Problem with qhull library, cannot run convex hull." -#~ msgstr "" -#~ "Bug? Problem mit qhull Bibliothek. Kann convex hull nicht ausführen." - -#~ msgid "Insufficient memory for spectrum filter." -#~ msgstr "Nicht genügend Speicher für Spektrumfilter" - -#~ msgid "Bad bincount value in spectrum filter." -#~ msgstr "Falsche Binanzahl im Spektrumfilter." +#: ../data/startup-tips.txt:25 +msgid "" +"From version 0.0.20, vector values in filter properties (e.g. \"(1,0,0)\") " +"can be specified using ISO 31-11 spherical coordinates using the following " +"notation , with angles in degrees" +msgstr "" -#~ msgid "Ranging aborted by user" -#~ msgstr "Ranging durch User abgebrochen" +#: ../data/startup-tips.txt:26 +msgid "" +"You can change the behavior of filter dragging by holding Ctrl (mac: cmd) or " +"Shift whilst dragging? This switches between move, copy and \"splice" +msgstr "" -#~ msgid "Insufficient memory for range" -#~ msgstr "Nicht genug Speicher für Range" +#: ../data/startup-tips.txt:27 +msgid "" +"We like to know where we are being helpful? Please consider writing the " +"program and version number in any work you might publish - whether in print " +"or online. Alternatively, link to our website, or write to us to let us know " +"we helped!" +msgstr "" -#~ msgid "" -#~ " Unable to merge stashes correctly. This is improbable, so please report " -#~ "this." -#~ msgstr "" -#~ " Kann stashes nicht korrekt zusammenführen. Dies ist nicht möglich bitte " -#~ "melden Sie das." +#: ../data/startup-tips.txt:28 +msgid "" +"You can merge files by placing two \"Pos Data\" filters in series, then " +"saving the result?" +msgstr "" Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/translations/3Depict_es_ES.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/translations/3Depict_es_ES.mo differ diff -Nru 3depict-0.0.19-1/translations/3Depict_es_ES.po 3depict-0.0.20/translations/3Depict_es_ES.po --- 3depict-0.0.19-1/translations/3Depict_es_ES.po 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/translations/3Depict_es_ES.po 2017-02-04 23:52:33.000000000 +0000 @@ -0,0 +1,5700 @@ +# Translation file for locale es_ES +# Copyright (C) 2017 +# This file is distributed under the same license as the 3Depict package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: 3Depict\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-04 23:42+0000\n" +"PO-Revision-Date: 2016-01-03 21:27+0000\n" +"Last-Translator: \n" +"Language-Team: Spanish (Spain) (http://www.transifex.com/mycae/3depict/" +"language/es_ES/)\n" +"Language: es_ES\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" + +#: ../src/gl/cameras.cpp:596 +msgid "Lock" +msgstr "Bloquear" + +#: ../src/gl/cameras.cpp:603 ../src/backend/filters/ionClip.cpp:529 +#: ../src/backend/filters/ionClip.cpp:551 +#: ../src/backend/filters/ionClip.cpp:573 +#: ../src/backend/filters/ionClip.cpp:610 +#: ../src/backend/filters/profile.cpp:1017 +#: ../src/backend/filters/profile.cpp:1055 +#: ../src/backend/filters/transform.cpp:1232 +#: ../src/backend/filters/transform.cpp:1259 +#: ../src/backend/filters/transform.cpp:1285 +#: ../src/backend/filters/annotation.cpp:576 +msgid "Origin" +msgstr "Origen" + +#: ../src/gl/cameras.cpp:611 ../src/backend/filters/spatialAnalysis.cpp:872 +msgid "Target" +msgstr "Destino" + +#: ../src/gl/cameras.cpp:617 +msgid "Up Dir." +msgstr "Arriba de Dir." + +#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 +msgid "Perspective" +msgstr "Perspectiva" + +#: ../src/gl/cameras.cpp:627 ../src/gl/cameras.cpp:730 +#: ../src/gui/mainFrame.cpp:5416 +msgid "Orthogonal" +msgstr "Ortogonal" + +#: ../src/gl/cameras.cpp:631 +msgid "Projection" +msgstr "Projection" + +#: ../src/gl/cameras.cpp:640 +msgid "Field of View (deg)" +msgstr "Campo de Vista (deg)" + +#: ../src/gl/cameras.cpp:646 +msgid "View size" +msgstr "Medida de vista" + +#: ../src/wx/wxcomponents.cpp:191 +msgid "Save Data..." +msgstr "Salva Dato..." + +#: ../src/wx/wxcomponents.cpp:192 +msgid "Text File (*.txt)|*.txt|All Files (*)|*" +msgstr "Archivo de texto (*.txt)|*.txt|Todos los Archivos (*)|*" + +#: ../src/wx/wxcomponents.cpp:204 +msgid "Error saving file. Check output dir is writable." +msgstr "Archivo de ahorro del error. Producción de control dir es writable." + +#: ../src/wx/wxcomponents.cpp:204 ../src/gui/dialogs/ExportRngDialog.cpp:187 +#: ../src/gui/mainFrame.cpp:1478 ../src/gui/mainFrame.cpp:1603 +#: ../src/gui/mainFrame.cpp:1652 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2284 ../src/gui/mainFrame.cpp:2357 +#: ../src/gui/mainFrame.cpp:2460 ../src/gui/mainFrame.cpp:2573 +msgid "Save error" +msgstr "Error al guardar" + +#: ../src/common/basics.cpp:183 +msgid "in the future?" +msgstr "En el futuro?" + +#: ../src/common/basics.cpp:234 +msgid "a decade ago" +msgstr "Hace una década" + +#: ../src/common/basics.cpp:235 +msgid "a year ago" +msgstr "Hace un año" + +#: ../src/common/basics.cpp:236 +msgid "a month ago" +msgstr "Hace un mes" + +#: ../src/common/basics.cpp:237 +msgid "a week ago" +msgstr "Hace una semana" + +#: ../src/common/basics.cpp:238 +msgid "a day ago" +msgstr "Hace un día" + +#: ../src/common/basics.cpp:239 +msgid "an hour ago" +msgstr "hace 1 hora" + +#: ../src/common/basics.cpp:240 +msgid "45 minutes ago" +msgstr "Hace 45 minutos" + +#: ../src/common/basics.cpp:241 +msgid "30 minutes ago" +msgstr "Hace 30 minutos" + +#: ../src/common/basics.cpp:242 +msgid "20 minutes ago" +msgstr "Hace 20 minutos" + +#: ../src/common/basics.cpp:243 +msgid "15 minutes ago" +msgstr "Hace 15 minutos" + +#: ../src/common/basics.cpp:244 +msgid "10 minutes ago" +msgstr "Hace 10 minutos" + +#: ../src/common/basics.cpp:245 +msgid "5 minutes ago" +msgstr "Hace 5 minutos" + +#: ../src/common/basics.cpp:246 +msgid "a minute ago" +msgstr "hace un minuto" + +#: ../src/common/basics.cpp:247 +msgid "30 seconds ago" +msgstr "Hace 30 segundos" + +#: ../src/common/basics.cpp:248 +msgid "10 seconds ago" +msgstr "Hace 10 segundos" + +#: ../src/common/basics.cpp:249 +msgid "a second ago" +msgstr "Un segundo hace" + +#: ../src/common/basics.cpp:254 +msgid "a few decades ago" +msgstr "Hace unas cuantas décadas" + +#: ../src/common/basics.cpp:255 +msgid "a few years ago" +msgstr "Hace unos cuantos años" + +#: ../src/common/basics.cpp:256 +msgid "a few months ago" +msgstr "Hace unos cuantos meses" + +#: ../src/common/basics.cpp:257 +msgid "a few weeks ago" +msgstr "Hace unas cuantas semanas" + +#: ../src/common/basics.cpp:258 +msgid "a few days ago" +msgstr "Hace unos cuantos días" + +#: ../src/common/basics.cpp:259 +msgid "a few hours ago" +msgstr "Hace unas cuantas horas" + +#: ../src/common/basics.cpp:262 +msgid "tens of minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:266 +msgid "a few minutes ago" +msgstr "Hace unos cuantos minutos" + +#: ../src/common/basics.cpp:269 +msgid "a few seconds ago" +msgstr "hace unos segundos" + +#: ../src/common/basics.cpp:296 +msgid "moments ago" +msgstr "Momentos hace" + +#: ../src/common/colourmap.cpp:307 +msgid "Jet" +msgstr "Jet" + +#: ../src/common/colourmap.cpp:308 +msgid "Hot" +msgstr "Caliente" + +#: ../src/common/colourmap.cpp:309 +msgid "Cold" +msgstr "Frío" + +#: ../src/common/colourmap.cpp:310 +msgid "Grey" +msgstr "Gris" + +#: ../src/common/colourmap.cpp:311 +msgid "Cyclic" +msgstr "Cíclico" + +#: ../src/common/colourmap.cpp:312 +msgid "General" +msgstr "General" + +#: ../src/common/colourmap.cpp:313 +msgid "Blue" +msgstr "Azul" + +#: ../src/common/colourmap.cpp:314 +msgid "Pseudo-Random" +msgstr "Pseudo-Aleatorio" + +#: ../src/common/colourmap.cpp:315 +msgid "Inferno" +msgstr "" + +#: ../src/common/colourmap.cpp:316 +msgid "Viridis" +msgstr "" + +#: ../src/common/constants.cpp:22 +msgid "" +"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " +"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." +"rrng)|*.rrng;*.RRNG|All Files (*)|*" +msgstr "" + +#: ../src/gui/glPane.cpp:642 +msgid "Use shift/ctrl-space or double tap to alter reset axis" +msgstr "Cambio de uso/ctrl-grifo espacial o doble para alterar reset eje" + +#: ../src/gui/glPane.cpp:938 +msgid "Image progress" +msgstr "Progreso de imagen" + +#: ../src/gui/glPane.cpp:939 +msgid "Rendering tiles..." +msgstr "Rendering Enladrilla..." + +#: ../src/gui/glPane.cpp:1132 +msgid "Animation progress" +msgstr "Progreso de animación" + +#: ../src/gui/glPane.cpp:1133 +msgid "Rendering sequence..." +msgstr "Rendering Secuencia..." + +#: ../src/gui/glPane.cpp:1171 +msgid "Saving Image " +msgstr "Imagen de ahorro " + +#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4504 +#: ../src/gui/mainFrame.cpp:4508 ../src/gui/mainFrame.cpp:4521 +#: ../src/backend/filters/dataLoad.cpp:339 +msgid " of " +msgstr " de " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:40 +msgid "Range Sources" +msgstr "Fuentes de gama" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:42 +msgid "Details" +msgstr "Detalles" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:53 +msgid "Source Filter" +msgstr "Filtro de fuentes" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:54 +#: ../src/backend/filters/rangeFile.cpp:657 +msgid "Ions" +msgstr "Iones" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:55 +#: ../src/gui/dialogs/rangeEditDialog.cpp:1587 +#: ../src/backend/filters/voxelise.cpp:1049 +#: ../src/backend/filters/rangeFile.cpp:724 +msgid "Ranges" +msgstr "Rangos" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:88 +msgid "Param" +msgstr "Param" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:89 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:105 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:352 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 +#: ../src/backend/filters/dataLoad.cpp:610 +msgid "Value" +msgstr "Valor" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:90 +msgid "Value2" +msgstr "Valor2" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:97 +msgid "Ion Name" +msgstr "Nombre de ión" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:98 +msgid "Num Ranges" +msgstr "Num Gamas" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:116 +#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:52 +msgid "Ion" +msgstr "Ión" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:117 +msgid "Range Start" +msgstr "Inicio de gama" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:118 +msgid "Range end" +msgstr "Fin de Rango" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2395 +msgid "Save pos..." +msgstr "Salva pos..." + +#: ../src/gui/dialogs/ExportRngDialog.cpp:152 +msgid "" +"Cameca/Ametek RRNG (*.rrng)|*.rrng|ORNL format RNG (*.rng)|*.rng|Cameca ENV " +"(*.env)|*.env|All Files (*)|*" +msgstr "" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1478 +#: ../src/gui/mainFrame.cpp:1653 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2285 ../src/gui/mainFrame.cpp:2461 +#: ../src/gui/mainFrame.cpp:2574 +msgid "Unable to save. Check output destination can be written to." +msgstr "" +"Incapaz de salvar. Destino de producción del control puede ser escrito a." + +#: ../src/gui/dialogs/ExportRngDialog.cpp:253 +msgid "Export Range" +msgstr "Exportar rango" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:258 +msgid "List of rangefiles in filter tree" +msgstr "Lista de rangefiles en árbol de filtro" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:260 +msgid "Detailed view of selected range" +msgstr "Vista detallada de gama seleccionada" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:221 +msgid "Show Overlays" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:246 +msgid "e.g. H2O" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:561 +#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:6071 +#: ../src/backend/filter.cpp:53 +msgid "Plot" +msgstr "Dibujar" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:562 +msgid "Short Name" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:563 +msgid "Long Name" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:564 +#: ../src/backend/filters/voxelise.cpp:1188 +#: ../src/backend/filters/profile.cpp:1159 +#: ../src/backend/filters/annotation.cpp:909 +#: ../src/backend/filters/spectrumPlot.cpp:679 +msgid "Colour" +msgstr "Colour" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:697 +#: ../src/backend/filters/annotation.cpp:613 +#: ../src/backend/filters/annotation.cpp:654 +#: ../src/backend/filters/annotation.cpp:823 +msgid "Start" +msgstr "Inicio" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:698 +#: ../src/backend/filters/annotation.cpp:621 +#: ../src/backend/filters/annotation.cpp:663 +#: ../src/backend/filters/annotation.cpp:831 +msgid "End" +msgstr "Final" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 +msgid "Range or ion?" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 +msgid "Select type to add" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 +msgid "Range Editor" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 +msgid "Enable or disable all overlays" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 +msgid "Entered overlays, use delete to remove" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 +msgid "Available plots for ranging" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 +msgid "Enter species to display as overlay, e.g. SiO2" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 +msgid "Editable ranges" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 +msgid "Editable ions" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 +#: ../src/gui/dialogs/animateFilterDialog.cpp:177 +msgid "Plots" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 +msgid "Overlay" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:39 +msgid "Remove &All" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:123 +msgid "Restore state?" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:133 +msgid "Multiple autosave states were found; would you like to restore one?" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:481 +#: ../src/backend/filter.cpp:484 +msgid "Error" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:39 +msgid "Warning" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:42 +#: ../src/gui/dialogs/filterErrorDialog.cpp:52 +msgid "Filter Errors" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:49 +msgid "Stashes" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:52 +msgid "Stashed Tree" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:54 +msgid "Properties" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:60 +msgid "Stash Name" +msgstr "Stash Nombre" + +#: ../src/gui/dialogs/StashDialog.cpp:61 +msgid "Filter Count" +msgstr "El Filtro Cuenta" + +#: ../src/gui/dialogs/StashDialog.cpp:94 +msgid "Stashed Trees" +msgstr "Stashed árboles" + +#: ../src/gui/dialogs/StashDialog.cpp:97 +msgid "Erase stashed item" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:98 +msgid "Filter view for current stash" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:99 +msgid "Settings for selected filter in current stash" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:100 +msgid "Available stashes" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:45 +msgid "Start Frame: " +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:47 +msgid "From File" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:50 +msgid "From Table" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 +#: ../src/gui/dialogs/animateFilterDialog.cpp:197 +msgid "Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:240 +msgid "Select text file..." +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:241 +msgid "Text files (*.txt)|*.txt;|All Files (*)|*" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:342 +msgid "String Keyframes" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:344 +msgid "Frame at which to start string sequence" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:345 +msgid "Frame offset for data start" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:346 +msgid "File to use as string data source, one value per row" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:347 +msgid "Select file to use as data source" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:348 +msgid "Use table below for data source" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:354 +msgid "Add new data rows to table, hold shift/cmd to insert multiple rows" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:355 +msgid "Remove selected strings from table" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:356 +msgid "Abort value selection and return to previous window" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:357 +msgid "Accept data values" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:60 +msgid "Keyframe Data" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:61 +msgid "Transition" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:64 +msgid "Step" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:65 +msgid "Ramp" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 +msgid "Start Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 +msgid "End Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:73 +msgid "Initial Value" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:74 +msgid "startColour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:75 +msgid "Final Value" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:76 +msgid "endColour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:250 +msgid "Key Frame : Colour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:252 +msgid "Colour at the start of the transtition" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:253 +msgid "Colour at end of transition" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:92 +msgid "Cameca/Ametek RRNG" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:93 +msgid "Oak-Ridge RNG" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:94 +msgid "Cameca/Ametek ENV" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:156 +msgid "Key frames" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:157 +msgid "Output Data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:158 +msgid "Filters and properties" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:164 +msgid "Dir : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:167 +msgid "Output only when refresh required" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:169 +msgid "Data Types:" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:170 +msgid "3D Images" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:171 +msgid "File Prefix: " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:173 +msgid "Size : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:175 +msgid "..." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:176 +msgid "Point data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:178 +msgid "Voxel data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:179 +msgid "Range files" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:180 +msgid "Format" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 +msgid "transition frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 ../src/gui/mainFrame.cpp:1705 +msgid "Frame count" +msgstr "El Marco cuenta" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:773 +msgid "Key frame : Colour" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:826 +msgid "File existed, but was unable to read or interpret file contents." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:827 +msgid "String load failed" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:848 +msgid "Keyframe : decimal" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:857 +msgid "Keyframe : integer" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:866 +msgid "Keyframe : 3D Point" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:994 +msgid "Select or create new folder" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1174 +msgid "Export Animation" +msgstr "Animación de exportación" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 +msgid "Select filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 +msgid "Select property" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1178 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1197 +msgid "Filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 +msgid "Property" +msgstr "Propiedad" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 +#: ../src/backend/filters/spatialAnalysis.cpp:1062 +#: ../src/backend/filters/transform.cpp:1149 +#: ../src/backend/filters/annotation.cpp:553 +#: ../src/backend/filters/annotation.cpp:559 +#: ../src/backend/filters/ionDownsample.cpp:466 +msgid "Mode" +msgstr "Modo" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 +msgid "Keyframe table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 +msgid "Remove the selected keyframe from the table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 +msgid "Enter where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 +msgid "Browse to directory where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1188 +msgid "" +"Title for files, result will be saved as #-name.png, where # is image number." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 +msgid "Target resolution (image size)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 +msgid "Select frame for property display" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 +msgid "Enter frame number to change frame (eg 1/20)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 +msgid "Save point data (POS files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 +msgid "Save plots (as text files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 +msgid "Save voxel data (raw files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 +msgid "Save range files in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 +msgid "Animation parameters for current frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 +msgid "Abort animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 +msgid "Run Animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1273 +msgid "Filter view" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 +msgid "Frame view" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:45 +msgid "Width :" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:47 +msgid "Height :" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:50 +#: ../src/gui/dialogs/prefDialog.cpp:85 +msgid "Reset" +msgstr "Restablecer" + +#: ../src/gui/dialogs/resolutionDialog.cpp:336 +msgid "Resolution Selection" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:63 +msgid "Export:" +msgstr "Exportar:" + +#: ../src/gui/dialogs/ExportPos.cpp:64 +#: ../src/backend/filters/boundingBox.cpp:568 +msgid "Visible" +msgstr "Visibilidad" + +#: ../src/gui/dialogs/ExportPos.cpp:65 +msgid "Selected Data" +msgstr "Dato seleccionado" + +#: ../src/gui/dialogs/ExportPos.cpp:67 +msgid "Available Data" +msgstr "Dato disponible" + +#: ../src/gui/dialogs/ExportPos.cpp:73 +msgid "Selection" +msgstr "Selección" + +#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 +msgid "Index" +msgstr "Índice" + +#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 +#: ../src/backend/filters/spatialAnalysis.cpp:2388 +#: ../src/backend/filters/spatialAnalysis.cpp:2481 +#: ../src/backend/filters/spatialAnalysis.cpp:2541 +#: ../src/backend/filters/spatialAnalysis.cpp:3292 +#: ../src/backend/filters/spatialAnalysis.cpp:3481 +#: ../src/backend/filters/profile.cpp:608 +#: ../src/backend/filters/spectrumPlot.cpp:65 +msgid "Count" +msgstr "Contador" + +#: ../src/gui/dialogs/ExportPos.cpp:451 +msgid "Export Pos Data" +msgstr "Exportación Pos Dato" + +#: ../src/gui/dialogs/ExportPos.cpp:454 +msgid "Tree of filters, select leaves to show ion data." +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:456 +msgid "Add all data from all filters" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:457 +msgid "Add all data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:458 +msgid "Add selected data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:73 +msgid "Panel Display" +msgstr "Panel de visualización" + +#: ../src/gui/dialogs/prefDialog.cpp:75 +msgid "Online Updates" +msgstr "Online Actualiza" + +#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 +msgid "Startup" +msgstr "Arranque" + +#: ../src/gui/dialogs/prefDialog.cpp:78 +msgid "Camera Speed" +msgstr "Velocidad de cámara" + +#: ../src/gui/dialogs/prefDialog.cpp:79 +msgid "Available Filters" +msgstr "Filtros disponibles" + +#: ../src/gui/dialogs/prefDialog.cpp:84 +msgid "Reset All" +msgstr "Restablecer todo" + +#: ../src/gui/dialogs/prefDialog.cpp:87 +msgid "Show all panels" +msgstr "Muestra todos los tableros" + +#: ../src/gui/dialogs/prefDialog.cpp:88 +msgid "Remember last" +msgstr "Recuerda último" + +#: ../src/gui/dialogs/prefDialog.cpp:89 +msgid "Show Selected" +msgstr "El Espectáculo Seleccionó" + +#: ../src/gui/dialogs/prefDialog.cpp:92 +msgid "Control Pane" +msgstr "Control Pane" + +#: ../src/gui/dialogs/prefDialog.cpp:93 +msgid "Raw Data Panel" +msgstr "Tablero de Dato crudo" + +#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:693 +msgid "Plot List" +msgstr "Lista de parcela" + +#: ../src/gui/dialogs/prefDialog.cpp:96 +msgid "Periodically notify about available updates" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:98 +msgid "Prefer orthographic at startup" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:99 +msgid "Move Rate" +msgstr "índice de movimiento" + +#: ../src/gui/dialogs/prefDialog.cpp:100 ../src/gui/dialogs/prefDialog.cpp:104 +msgid "(slow)" +msgstr "(Lento)" + +#: ../src/gui/dialogs/prefDialog.cpp:102 ../src/gui/dialogs/prefDialog.cpp:106 +msgid "(fast)" +msgstr "(Ayuno)" + +#: ../src/gui/dialogs/prefDialog.cpp:103 +msgid "Zoom Rate" +msgstr "Zoom índice" + +#: ../src/gui/dialogs/prefDialog.cpp:416 +msgid "Show all panels when starting program" +msgstr "Muestra todos los tableros cuándo empezando programa" + +#: ../src/gui/dialogs/prefDialog.cpp:419 +msgid "Show panels visible at last shutdown when starting program" +msgstr "" +"Tableros de espectáculo visibles por fin shutdown cuándo empezando programa" + +#: ../src/gui/dialogs/prefDialog.cpp:426 +msgid "Show selected panels when starting program" +msgstr "Espectáculo tableros seleccionados cuándo empezando programa" + +#: ../src/gui/dialogs/prefDialog.cpp:475 +msgid "Preferences" +msgstr "Preferencias" + +#: ../src/gui/dialogs/prefDialog.cpp:477 +msgid "Set the method of panel layout when starting the program" +msgstr "Pone el método de tablero layout cuándo empezando el programa" + +#: ../src/gui/dialogs/prefDialog.cpp:480 +msgid "" +"Lets the program check the internet to see if updates to the program version " +"are available, then notifies you about updates now and again." +msgstr "" +"Deja el programa comprueba el internet para ver si actualiza a la versión de " +"programa es disponible, entonces te notifica aproximadamente actualiza ahora " +"y otra vez." + +#: ../src/gui/dialogs/prefDialog.cpp:482 +msgid "" +"By default, use an orthographic camera at startup. State files will override " +"this preference." +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:483 +msgid "Camera translation, orbit and swivel rates. " +msgstr "Traducción de cámara, órbita y swivel índices. " + +#: ../src/gui/dialogs/prefDialog.cpp:484 +msgid "Camera zooming rate." +msgstr "Cámara zooming índice." + +#: ../src/gui/dialogs/prefDialog.cpp:486 +msgid "Reset the filter initial values back to program defaults" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:487 +msgid "Reset all filter initial values back to program defaults" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:559 +msgid "Filt. Default" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:561 +msgid "Camera" +msgstr "Cámara" + +#: ../src/gui/mainFrame.cpp:119 +msgid "New camera name..." +msgstr "Nombre de cámara nuevo..." + +#: ../src/gui/mainFrame.cpp:120 +msgid "New stash name..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:125 +msgid "New Filter..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:568 +#: ../src/backend/filters/annotation.cpp:672 +#: ../src/backend/filters/annotation.h:96 +msgid "Annotation" +msgstr "Anotacion" + +#: ../src/gui/mainFrame.cpp:143 +msgid "Bounding Box" +msgstr "Cuadro limitador" + +#: ../src/gui/mainFrame.cpp:144 ../src/backend/filters/ionClip.cpp:629 +#: ../src/backend/filters/ionClip.h:66 +msgid "Clipping" +msgstr "Recorte" + +#: ../src/gui/mainFrame.cpp:145 ../src/backend/filters/clusterAnalysis.h:151 +msgid "Cluster Analysis" +msgstr "Análisis de grupo" + +#: ../src/gui/mainFrame.cpp:146 +msgid "Compos. Profiles" +msgstr "Compos. Perfiles" + +#: ../src/gui/mainFrame.cpp:147 +msgid "Downsampling" +msgstr "Downsampling" + +#: ../src/gui/mainFrame.cpp:148 +msgid "Extern. Prog." +msgstr "Extern. Prog." + +#: ../src/gui/mainFrame.cpp:149 +msgid "Ion Colour" +msgstr "Color de ión" + +#: ../src/gui/mainFrame.cpp:150 +msgid "Ion Info" +msgstr "Ión Info" + +#: ../src/gui/mainFrame.cpp:151 +msgid "Ion Transform" +msgstr "El Ión Transforma" + +#: ../src/gui/mainFrame.cpp:152 ../src/backend/filters/spectrumPlot.h:76 +msgid "Spectrum" +msgstr "Espectro" + +#: ../src/gui/mainFrame.cpp:153 +msgid "Range File" +msgstr "Archivo de gama" + +#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:192 +msgid "Spat. Analysis" +msgstr "Spat. Análisis" + +#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:126 +msgid "Voxelisation" +msgstr "Voxelisation" + +#: ../src/gui/mainFrame.cpp:453 +msgid "OpenGL Failed" +msgstr "OpenGL Falló" + +#: ../src/gui/mainFrame.cpp:454 ../src/gui/mainFrame.cpp:456 +msgid "" +"Unable to initialise the openGL (3D) panel. Program cannot start. Please " +"check your video drivers." +msgstr "" +"Incapaz a initialise el openGL (3D) tablero. El Programa no puede empezar. " +"Complacer comprobar vuestros conductores de vídeo." + +#: ../src/gui/mainFrame.cpp:477 +msgid "&Open...\tCtrl+O" +msgstr "&Abierto...\tCtrl+O" + +#: ../src/gui/mainFrame.cpp:477 +msgid "Open state file" +msgstr "Archivo estatal abierto" + +#: ../src/gui/mainFrame.cpp:478 +msgid "&Merge...\tCtrl+Shift+O" +msgstr "&Fusiona...\tCtrl+Cambio+O" + +#: ../src/gui/mainFrame.cpp:478 +msgid "Merge other file" +msgstr "Fusionar otro archivo" + +#: ../src/gui/mainFrame.cpp:482 +msgid "&Recent" +msgstr "&Reciente" + +#: ../src/gui/mainFrame.cpp:483 +msgid "&Save\tCtrl+S" +msgstr "&Salva\tCtrl+S" + +#: ../src/gui/mainFrame.cpp:483 +msgid "Save state to file" +msgstr "Salva estatal de archivar" + +#: ../src/gui/mainFrame.cpp:485 +msgid "Save &As...\tCtrl+Shift+S" +msgstr "Salva &Tan...\tCtrl+Cambio+S" + +#: ../src/gui/mainFrame.cpp:485 +msgid "Save current state to new file" +msgstr "Salva estado actual a archivo nuevo" + +#: ../src/gui/mainFrame.cpp:488 +msgid "&Plot...\tCtrl+P" +msgstr "&Parcela...\tCtrl+P" + +#: ../src/gui/mainFrame.cpp:488 +msgid "Export Current Plot" +msgstr "Exportación Parcela Actual" + +#: ../src/gui/mainFrame.cpp:489 +msgid "&Image...\tCtrl+I" +msgstr "&Imagen...\tCtrl+Yo" + +#: ../src/gui/mainFrame.cpp:489 +msgid "Export Current 3D View" +msgstr "Corriente de exportación 3D Vista" + +#: ../src/gui/mainFrame.cpp:490 +msgid "Ion&s...\tCtrl+N" +msgstr "Ión&s...\tCtrl+N" + +#: ../src/gui/mainFrame.cpp:490 +msgid "Export Ion Data" +msgstr "Dato de Ión de la exportación" + +#: ../src/gui/mainFrame.cpp:491 +msgid "Ran&ges...\tCtrl+G" +msgstr "Corrió&ges...\tCtrl+G" + +#: ../src/gui/mainFrame.cpp:491 +msgid "Export Range Data" +msgstr "Dato de Gama de la exportación" + +#: ../src/gui/mainFrame.cpp:492 +msgid "&Animate Filters...\tCtrl+T" +msgstr "" + +#: ../src/gui/mainFrame.cpp:492 +msgid "Export Animated Filter" +msgstr "" + +#: ../src/gui/mainFrame.cpp:493 +msgid "Ani&mate Camera...\tCtrl+M" +msgstr "" + +#: ../src/gui/mainFrame.cpp:493 +msgid "Export Animated Camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:494 +msgid "Pac&kage...\tCtrl+K" +msgstr "Pac&kage...\tCtrl+K" + +#: ../src/gui/mainFrame.cpp:494 +msgid "Export analysis package" +msgstr "Paquete de análisis de la exportación" + +#: ../src/gui/mainFrame.cpp:496 +msgid "&Export" +msgstr "&Exportar" + +#: ../src/gui/mainFrame.cpp:499 +msgid "&Quit\tCtrl+Q" +msgstr "&Quit\tCtrl+Q" + +#: ../src/gui/mainFrame.cpp:499 ../src/gui/mainFrame.cpp:501 +msgid "Exit Program" +msgstr "Programa de salida" + +#: ../src/gui/mainFrame.cpp:501 +msgid "E&xit" +msgstr "Sa&lir" + +#: ../src/gui/mainFrame.cpp:503 +msgid "&File" +msgstr "&Archivo" + +#: ../src/gui/mainFrame.cpp:507 +msgid "&Background Colour...\tCtrl+B" +msgstr "&Color de fondo...\tCtrl+B" + +#: ../src/gui/mainFrame.cpp:507 +msgid "Change background colour" +msgstr "Color de fondo del cambio" + +#: ../src/gui/mainFrame.cpp:511 +msgid "&Control Pane\tF2" +msgstr "" + +#: ../src/gui/mainFrame.cpp:511 ../src/gui/mainFrame.cpp:514 +msgid "Toggle left control pane" +msgstr "Toggle Dejó control pane" + +#: ../src/gui/mainFrame.cpp:514 +msgid "&Control Pane\tAlt+C" +msgstr "&Control Pane\tAlt+C" + +#: ../src/gui/mainFrame.cpp:520 +msgid "&Raw Data Pane\tF3" +msgstr "" + +#: ../src/gui/mainFrame.cpp:520 ../src/gui/mainFrame.cpp:523 +msgid "Toggle raw data pane (bottom)" +msgstr "Toggle Dato crudo pane (fondo)" + +#: ../src/gui/mainFrame.cpp:523 +msgid "&Raw Data Pane\tAlt+R" +msgstr "&Dato crudo Pane\tAlt+R" + +#: ../src/gui/mainFrame.cpp:527 +msgid "&Plot List\tF4" +msgstr "" + +#: ../src/gui/mainFrame.cpp:527 ../src/gui/mainFrame.cpp:529 +msgid "Toggle plot list" +msgstr "Toggle Lista de parcela" + +#: ../src/gui/mainFrame.cpp:529 +msgid "&Plot List\tAlt+P" +msgstr "&Lista de parcela\tAlt+P" + +#: ../src/gui/mainFrame.cpp:535 +msgid "&Legend\tCtrl+L" +msgstr "&Leyenda\tCtrl+L" + +#: ../src/gui/mainFrame.cpp:535 +msgid "Toggle Legend display" +msgstr "Toggle Exhibición de leyenda" + +#: ../src/gui/mainFrame.cpp:537 +msgid "P&lot..." +msgstr "P&Parcela..." + +#: ../src/gui/mainFrame.cpp:538 +msgid "&Axis\tCtrl+Shift+I" +msgstr "&Eje\tCtrl+Cambio+yo" + +#: ../src/gui/mainFrame.cpp:538 +msgid "Toggle World Axis display" +msgstr "Toggle Exhibición de Eje mundial" + +#: ../src/gui/mainFrame.cpp:543 +msgid "&Fullscreen mode\tF11" +msgstr "&Fullscreen F\tde modo11" + +#: ../src/gui/mainFrame.cpp:543 ../src/gui/mainFrame.cpp:545 +msgid "Next fullscreen mode: with toolbars" +msgstr "Próximo fullscreen modo: con toolbars" + +#: ../src/gui/mainFrame.cpp:545 +msgid "&Fullscreen mode\tCtrl+Shift+F" +msgstr "&Fullscreen Modo\tCtrl+F+de Cambio" + +#: ../src/gui/mainFrame.cpp:550 +msgid "&Undo\tCtrl+Z" +msgstr "&Deshace\tCtrl+Z" + +#: ../src/gui/mainFrame.cpp:552 +msgid "&Redo\tCtrl+Y" +msgstr "&Redo\tCtrl+Y" + +#: ../src/gui/mainFrame.cpp:555 +msgid "&Range" +msgstr "" + +#: ../src/gui/mainFrame.cpp:558 +msgid "&Preferences" +msgstr "&Preferencias" + +#: ../src/gui/mainFrame.cpp:560 +msgid "&Edit" +msgstr "&Editar" + +#: ../src/gui/mainFrame.cpp:563 +msgid "&View" +msgstr "&Ver" + +#: ../src/gui/mainFrame.cpp:565 +msgid "&Help...\tCtrl+H" +msgstr "&Ayuda...\tCtrl+H" + +#: ../src/gui/mainFrame.cpp:565 +msgid "Show help files and documentation" +msgstr "Archivos de ayuda del espectáculo y documentación" + +#: ../src/gui/mainFrame.cpp:566 +msgid "&Contact..." +msgstr "&Contacto..." + +#: ../src/gui/mainFrame.cpp:566 +msgid "Open contact page" +msgstr "Página de contacto abierto" + +#: ../src/gui/mainFrame.cpp:568 +msgid "&About..." +msgstr "&Acerca de..." + +#: ../src/gui/mainFrame.cpp:568 +msgid "Information about this program" +msgstr "Información sobre este programa" + +#: ../src/gui/mainFrame.cpp:569 +msgid "&Help" +msgstr "A&yuda" + +#: ../src/gui/mainFrame.cpp:571 +msgid "Stashed Filters" +msgstr "Stashed Filtros" + +#: ../src/gui/mainFrame.cpp:576 +msgid "New Filters" +msgstr "" + +#: ../src/gui/mainFrame.cpp:606 +msgid "Auto Refresh" +msgstr "Coche Refresh" + +#: ../src/gui/mainFrame.cpp:612 +msgid "Filter settings" +msgstr "Configuración de filtros" + +#: ../src/gui/mainFrame.cpp:615 +msgid "Camera Name" +msgstr "Nombre de cámara" + +#: ../src/gui/mainFrame.cpp:627 +msgid "Resize to Fit" +msgstr "" + +#: ../src/gui/mainFrame.cpp:629 +msgid "3D Post-processing" +msgstr "3D Correo-procesando" + +#: ../src/gui/mainFrame.cpp:631 +msgid "Enable Cropping" +msgstr "Habilita Cropping" + +#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 +msgid "x-y" +msgstr "x-y" + +#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 +msgid "x-z" +msgstr "x-z" + +#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 +msgid "y-x" +msgstr "y-x" + +#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 +msgid "y-z" +msgstr "y-z" + +#: ../src/gui/mainFrame.cpp:637 ../src/gui/mainFrame.cpp:648 +msgid "z-x" +msgstr "z-x" + +#: ../src/gui/mainFrame.cpp:638 ../src/gui/mainFrame.cpp:649 +msgid "z-y" +msgstr "z-y" + +#: ../src/gui/mainFrame.cpp:653 +msgid "Use camera coordinates" +msgstr "Coordenadas de cámara del uso" + +#: ../src/gui/mainFrame.cpp:654 +msgid "dX" +msgstr "dX" + +#: ../src/gui/mainFrame.cpp:656 +msgid "dY" +msgstr "dY" + +#: ../src/gui/mainFrame.cpp:658 +msgid "dZ" +msgstr "dZ" + +#: ../src/gui/mainFrame.cpp:660 +msgid "Enable Anaglyphic Stereo" +msgstr "Habilita Anaglyphic Stereo" + +#: ../src/gui/mainFrame.cpp:661 +msgid "Flip Channels" +msgstr "Flip Canales" + +#: ../src/gui/mainFrame.cpp:662 +msgid "Anaglyph Mode" +msgstr "Anaglyph Modo" + +#: ../src/gui/mainFrame.cpp:664 +msgid "Red-Blue" +msgstr "Rojo-Azul" + +#: ../src/gui/mainFrame.cpp:665 +msgid "Red-Green" +msgstr "Rojo-Verde" + +#: ../src/gui/mainFrame.cpp:666 +msgid "Red-Cyan" +msgstr "Rojo-Cyan" + +#: ../src/gui/mainFrame.cpp:667 +msgid "Green-Magenta" +msgstr "Verde-Magenta" + +#: ../src/gui/mainFrame.cpp:671 +msgid "Baseline Separation" +msgstr "Baseline Separación" + +#: ../src/gui/mainFrame.cpp:673 ../src/backend/filters/voxelise.cpp:1150 +#: ../src/backend/filters/voxelise.cpp:1409 +#: ../src/backend/filters/profile.cpp:1168 +#: ../src/backend/filters/boundingBox.cpp:732 +#: ../src/backend/filters/annotation.cpp:914 +#: ../src/backend/filters/dataLoad.cpp:755 +#: ../src/backend/filters/spectrumPlot.cpp:686 +msgid "Appearance" +msgstr "" + +#: ../src/gui/mainFrame.cpp:674 +msgid "Smooth && translucent objects" +msgstr "Liso && translucent objetos" + +#: ../src/gui/mainFrame.cpp:676 +msgid "3D lighting" +msgstr "3D encendiendo" + +#: ../src/gui/mainFrame.cpp:679 +msgid "Performance" +msgstr "" + +#: ../src/gui/mainFrame.cpp:680 +msgid "Fast and weak randomisation." +msgstr "Rápido y débil randomisation." + +#: ../src/gui/mainFrame.cpp:682 +msgid "Limit Output Pts" +msgstr "" + +#: ../src/gui/mainFrame.cpp:687 +msgid "Filter caching" +msgstr "Filtro caching" + +#: ../src/gui/mainFrame.cpp:689 +msgid "Max. Ram usage (%)" +msgstr "Max. Ram Uso (%)" + +#: ../src/gui/mainFrame.cpp:761 +msgid "Warning: Your configuration file appears to be invalid:\n" +msgstr "Aviso: Vuestro archivo de configuración aparece para ser nulo:\n" + +#: ../src/gui/mainFrame.cpp:762 +msgid "\tConfig Load: " +msgstr "\tConfig Carga: " + +#: ../src/gui/mainFrame.cpp:1060 +msgid "Current state has not been saved, would you like to save it now?" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1061 +msgid "State changed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1079 +msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1081 +msgid "XML State File (*.xml)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1082 +msgid "POS File (*.pos)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1083 +msgid "LAWATAP ATO File (*.ato)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1084 +msgid "Text File (*.txt, *.csv)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1085 +msgid "3Dap Files (*.ops)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1086 +msgid "All Files (*)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1099 ../src/gui/mainFrame.cpp:1148 +msgid "Select Data or State File..." +msgstr "Selecciona Dato o Archivo Estatal..." + +#: ../src/gui/mainFrame.cpp:1149 +msgid "" +"3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|" +"XML State File (*.xml)|*.xml|All Files (*)|*" +msgstr "" +"3Describe archivo (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|Archivo de POS (*." +"pos)|*.pos|XML Archivo Estatal (*.xml)|*.xml|Todos los Archivos (*)|*" + +#: ../src/gui/mainFrame.cpp:1160 +msgid "Merged file." +msgstr "Archivo fusionado." + +#: ../src/gui/mainFrame.cpp:1263 +msgid "Tip: You can use ⌘ (command) to merge" +msgstr "Consejo: puedes utilizar ⌘ (orden) para fusionar" + +#: ../src/gui/mainFrame.cpp:1265 +msgid "Tip: You can use ctrl to merge" +msgstr "Consejo: puedes utilizar ctrl para fusionar" + +#: ../src/gui/mainFrame.cpp:1299 +msgid "Load error" +msgstr "Error en la carga" + +#: ../src/gui/mainFrame.cpp:1300 +msgid "" +"Error loading state file.\n" +"See console for more info." +msgstr "" +"El Error que carga archivo estatal.\n" +"Ve consola para más info." + +#: ../src/gui/mainFrame.cpp:1308 +msgid "" +"This state file contains filters that can be unsafe to run\n" +"Do you wish to remove these before continuing?." +msgstr "" +"Este archivo estatal contiene filtros que pueden ser unsafe a carrera\n" +" deseas sacar estos antes de continuar?." + +#: ../src/gui/mainFrame.cpp:1309 +msgid "Security warning" +msgstr "Aviso de seguridad" + +#: ../src/gui/mainFrame.cpp:1499 ../src/gui/mainFrame.cpp:1595 +#: ../src/gui/mainFrame.cpp:2029 +msgid "Unable to save" +msgstr "Incapaz de salvar" + +#: ../src/gui/mainFrame.cpp:1500 +msgid "No plot available. Please create a plot before exporting." +msgstr "" +"Ninguna parcela disponible. Complacer crear una parcela antes de exportar." + +#: ../src/gui/mainFrame.cpp:1504 +msgid "Save plot..." +msgstr "Salva parcela..." + +#: ../src/gui/mainFrame.cpp:1505 +msgid "" +"By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*." +"svg|PNG File (*.png)|*.png|All Files (*)|*" +msgstr "" +"Por Extensión (svg,png)|*.svg;*.png|Scalable Vector Archivo de gráficos (*." +"svg)|*.svg|PNG Archivo (*.png)|*.png|Todos los Archivos (*)|*" + +#: ../src/gui/mainFrame.cpp:1559 +msgid "Select type for save" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1560 +msgid "Choose file type" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1580 ../src/gui/mainFrame.cpp:1637 +#: ../src/gui/mainFrame.cpp:1673 +msgid "Choose resolution" +msgstr "Escoge resolución" + +#: ../src/gui/mainFrame.cpp:1596 +msgid "Unknown file extension. Please use \"svg\" or \"png\"" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1607 +msgid "Saved plot: " +msgstr "Parcela salvada: " + +#: ../src/gui/mainFrame.cpp:1614 ../src/gui/mainFrame.cpp:1666 +msgid "Save Image..." +msgstr "Guardar imagen..." + +#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:1667 +msgid "PNG File (*.png)|*.png|All Files (*)|*" +msgstr "PNG Archivo (*.png)|*.png|Todos los Archivos (*)|*" + +#: ../src/gui/mainFrame.cpp:1629 +msgid "File already exists. Overwrite?" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1630 ../src/gui/mainFrame.cpp:2425 +#: ../src/gui/mainFrame.cpp:2531 ../src/gui/mainFrame.cpp:2554 +msgid "Overwrite?" +msgstr "¿Sobreescribir?" + +#: ../src/gui/mainFrame.cpp:1657 ../src/gui/mainFrame.cpp:1733 +msgid "Saved 3D View :" +msgstr "Salvado 3D Vista :" + +#: ../src/gui/mainFrame.cpp:1687 +msgid "Program limitation" +msgstr "Limitación de programa" + +#: ../src/gui/mainFrame.cpp:1688 +msgid "" +"Limitation on the screenshot dimension; please ensure that both width and " +"height exceed the initial values,\n" +" or that they are smaller than the initial values.\n" +" If this bothers, please submit a bug." +msgstr "" +"Limitación en el screenshot dimensión; complacer asegurar que ambos ancho y " +"la alzada superan los valores iniciales,\n" +" o que son más pequeños que los valores iniciales.\n" +" Si esto molesta, complacer entregar un bug." + +#: ../src/gui/mainFrame.cpp:1705 +msgid "Number of frames" +msgstr "Número de fotogramas" + +#: ../src/gui/mainFrame.cpp:1759 +msgid "Abo&rt" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1761 +msgid "&Refresh" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1870 +msgid "Cannot animate with no filters." +msgstr "" + +#: ../src/gui/mainFrame.cpp:1952 +msgid "Animating" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1953 +msgid "Performing refresh" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1979 +msgid "Filter property change failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2001 +msgid "Refresh failed on frame :" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2030 +msgid "Image save failed for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2055 +msgid "Ion save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2056 +msgid "Unable to save ions for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2087 +msgid "Plot save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2088 +msgid "Unable to save plot or frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2129 +msgid "Range save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2130 +msgid "Unable to save range for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2159 +msgid "Voxel save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2160 +msgid "Unable to save voxels for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2189 +msgid "Animate failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2213 ../src/gui/mainFrame.cpp:2379 +#: ../src/gui/mainFrame.cpp:2486 +msgid "No filters means no data to export" +msgstr "Ningún filtro significa ningún dato para exportar" + +#: ../src/gui/mainFrame.cpp:2227 +msgid "Package name" +msgstr "Nombre del Paquete" + +#: ../src/gui/mainFrame.cpp:2228 +msgid "Package directory name" +msgstr "Nombre de directorio del paquete" + +#: ../src/gui/mainFrame.cpp:2230 +msgid "AnalysisPackage" +msgstr "AnalysisPackage" + +#: ../src/gui/mainFrame.cpp:2243 +msgid "Package folder already exists, won't overwrite." +msgstr "Carpeta de paquete ya existe, no overwrite." + +#: ../src/gui/mainFrame.cpp:2244 +msgid "Not available" +msgstr "No disponible" + +#: ../src/gui/mainFrame.cpp:2269 +msgid "" +"Package folder creation failed\n" +"check writing to this location is possible." +msgstr "" +"Creación de carpeta del paquete el control\n" +"fallado que escribe a esta ubicación es posible." + +#: ../src/gui/mainFrame.cpp:2270 +msgid "Folder creation failed" +msgstr "Creación de carpeta falló" + +#: ../src/gui/mainFrame.cpp:2290 +msgid "Copying" +msgstr "Copiando" + +#: ../src/gui/mainFrame.cpp:2291 +msgid "Copying referenced files" +msgstr "Copiando referenced archivos" + +#: ../src/gui/mainFrame.cpp:2357 +msgid "Error copying file" +msgstr "El Error que copia archivo" + +#: ../src/gui/mainFrame.cpp:2366 +msgid "Saved package: " +msgstr "Paquete salvado: " + +#: ../src/gui/mainFrame.cpp:2390 +msgid "Export" +msgstr "Exportar" + +#: ../src/gui/mainFrame.cpp:2396 +msgid "" +"POS Data (*.pos)|*.pos|Text File (*.txt)|*.txt|VTK Legacy (*.vtk)|*.vtk|All " +"Files (*)|*" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2424 ../src/gui/mainFrame.cpp:2530 +msgid "File already exists, overwrite?" +msgstr "El Archivo ya existe, overwrite?" + +#: ../src/gui/mainFrame.cpp:2465 +msgid "Saved ions: " +msgstr "Iones salvados: " + +#: ../src/gui/mainFrame.cpp:2490 +msgid "Export Ranges" +msgstr "Gamas de exportación" + +#: ../src/gui/mainFrame.cpp:2512 +msgid "Save state..." +msgstr "Salva estatal..." + +#: ../src/gui/mainFrame.cpp:2513 +msgid "XML state file (*.xml)|*.xml|All Files (*)|*" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2553 +msgid "Files have been referred to using relative paths. Keep relative paths?" +msgstr "" +"Los Archivos han sido referred a utilizar caminos relativos. Mantiene " +"caminos relativos?" + +#: ../src/gui/mainFrame.cpp:2586 +msgid "Saved state: " +msgstr "Estado salvado: " + +#: ../src/gui/mainFrame.cpp:2662 +msgid "Range editor" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2929 +msgid "Manual not found locally. Launching web browser" +msgstr "Manual no fundar localmente. Navegador de web del lanzamiento" + +#: ../src/gui/mainFrame.cpp:2938 +msgid "Opening contact page in external web browser" +msgstr "Página de contacto de la apertura en navegador de web externa" + +#: ../src/gui/mainFrame.cpp:2946 +msgid "No filter stashes to edit." +msgstr "Ningún filtro stashes para editar." + +#: ../src/gui/mainFrame.cpp:2950 +msgid "Filter Stashes" +msgstr "Filtro Stashes" + +#: ../src/gui/mainFrame.cpp:2967 +msgid "Quick and dirty analysis for point data." +msgstr "Rápidamente y análisis sucio para dato de punto." + +#: ../src/gui/mainFrame.cpp:2977 +msgid "Compiled with wx Version: " +msgstr "Compiled Con wx Versión: " + +#: ../src/gui/mainFrame.cpp:2998 +msgid "Press enter to store new stash" +msgstr "La Prensa introduce para almacenar nuevo stash" + +#: ../src/gui/mainFrame.cpp:3004 +msgid "Press enter to restore stash" +msgstr "La Prensa introduce para restaurar stash" + +#: ../src/gui/mainFrame.cpp:3037 +msgid "Unable to create stash, selection invalid" +msgstr "Incapaz de crear stash, inválido de selección" + +#: ../src/gui/mainFrame.cpp:3044 +msgid "Created new filter tree stash" +msgstr "Filtro nuevo creado árbol stash" + +#: ../src/gui/mainFrame.cpp:3156 +msgid "Filter type not a data source - can't be at tree base" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete\tDel" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete the selected filter" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3351 +msgid "Moving - Hold ⌘ (command) to copy, shift to splice" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3353 +msgid "Moving - Hold control to copy, shift to splice" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3696 +msgid "Press enter to store new camera" +msgstr "La Prensa introduce para almacenar cámara nuevo" + +#: ../src/gui/mainFrame.cpp:3698 +msgid "Press enter to restore camera" +msgstr "La Prensa introduce para restaurar cámara" + +#: ../src/gui/mainFrame.cpp:3723 ../src/gui/mainFrame.cpp:3764 +msgid "Restored camera: " +msgstr "Cámara restaurado: " + +#: ../src/gui/mainFrame.cpp:3741 +msgid "Stored camera: " +msgstr "Cámara almacenado: " + +#: ../src/gui/mainFrame.cpp:3827 +msgid "Select an item from the filter tree before choosing a new filter" +msgstr "" +"Seleccionar un elemento del árbol de filtro antes de escoger un filtro nuevo" + +#: ../src/gui/mainFrame.cpp:3829 +msgid "Load data source (file->open) before choosing a new filter" +msgstr "" +"Fuente de dato de la carga (archivo->abierto) antes de escoger un filtro " +"nuevo" + +#: ../src/gui/mainFrame.cpp:3855 +msgid "Select RNG File..." +msgstr "Selecciona RNG Archivo..." + +#: ../src/gui/mainFrame.cpp:3876 +msgid "Failed reading range file." +msgstr "Fallado leyendo archivo de gama." + +#: ../src/gui/mainFrame.cpp:3880 +msgid "Error loading file" +msgstr "Error al cargar un archivo" + +#: ../src/gui/mainFrame.cpp:3941 ../src/gui/mainFrame.cpp:4042 +#: ../src/gui/mainFrame.cpp:5554 ../src/gui/mainFrame.cpp:6073 +msgid "Cons." +msgstr "Cons." + +#: ../src/gui/mainFrame.cpp:4005 +msgid "Refresh Aborted." +msgstr "Refresh Abortó." + +#: ../src/gui/mainFrame.cpp:4046 +msgid "*Cons." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4048 +msgid "§Cons." +msgstr "§Cons." + +#: ../src/gui/mainFrame.cpp:4110 +msgid "Complete" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4208 +msgid "msgs" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4249 +msgid "Autosave complete." +msgstr "Autoguardado completado." + +#: ../src/gui/mainFrame.cpp:4453 +msgid "Aborting...." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4519 +msgid "Updated." +msgstr "Actualizada." + +#: ../src/gui/mainFrame.cpp:4528 +msgid "Calculating..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4531 +msgid "% Done (Esc aborts)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4533 +msgid "% Done" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4808 +msgid "Tip: You can shift-click to force full refresh, if required" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4870 +msgid "No data to save" +msgstr "Ningún dato para salvar" + +#: ../src/gui/mainFrame.cpp:5052 +msgid "Aborting..." +msgstr "Abortando..." + +#: ../src/gui/mainFrame.cpp:5058 +msgid "" +"Waiting for refresh to abort. Exiting could lead to the program " +"backgrounding. Exit anyway? " +msgstr "" +"Esperando para refresh para abortar. Saliendo podría dirigir al programa " +"backgrounding. Salida en todo caso? " + +#: ../src/gui/mainFrame.cpp:5059 ../src/gui/mainFrame.cpp:5079 +msgid "Confirmation request" +msgstr "Confirmation Petición" + +#: ../src/gui/mainFrame.cpp:5078 +msgid "Are you sure you wish to exit 3Depict?" +msgstr "Te es seguro deseas salir 3Describe?" + +#: ../src/gui/mainFrame.cpp:5582 +msgid "Update Notice: New version " +msgstr "Actualiza Aviso: versión Nueva " + +#: ../src/gui/mainFrame.cpp:5582 +msgid " found online." +msgstr " Encontrado online." + +#: ../src/gui/mainFrame.cpp:5586 +msgid "Online Check: " +msgstr "Online Control: " + +#: ../src/gui/mainFrame.cpp:5586 +msgid " is up-to-date." +msgstr " Es actual." + +#: ../src/gui/mainFrame.cpp:5676 +msgid "An auto-save state was found, would you like to restore it?." +msgstr "Un coche-salvar el estado fue encontrado, te gusta para restaurarlo?." + +#: ../src/gui/mainFrame.cpp:5677 +msgid "Autosave" +msgstr "Autoguardar" + +#: ../src/gui/mainFrame.cpp:5684 +msgid "Unable to load autosave file.." +msgstr "Incapaz de cargar autosave archivo.." + +#: ../src/gui/mainFrame.cpp:5875 +msgid "List of available filters" +msgstr "Lista de filtros disponibles" + +#: ../src/gui/mainFrame.cpp:5877 +msgid "" +"Tree - drag to move items, hold ⌘ for copy, shift for splice. Tap delete to " +"remove items, multi-click to rename" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5879 +msgid "" +"Tree - drag to move items, hold Ctrl for copy, shift for splice. Tap delete " +"to remove items, multi-click to rename." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5881 +msgid "" +"Enable/Disable automatic updates of data when filter change takes effect" +msgstr "" +"Habilitar/Imposibilitar automático actualiza de dato cuándo cambio de filtro " +"toma efecto" + +#: ../src/gui/mainFrame.cpp:5884 +msgid "" +"Enable/Disable \"Alpha blending\" (transparency) in rendering system. " +"Blending is used to smooth objects (avoids artefacts known as \"jaggies\") " +"and to make transparent surfaces. Disabling will provide faster rendering " +"but look more blocky" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5885 +msgid "" +"Enable/Disable lighting calculations in rendering, for objects that request " +"this. Lighting provides important depth cues for objects comprised of 3D " +"surfaces. Disabling may allow faster rendering in complex scenes" +msgstr "" +"Habilita/Imposibilita encender cálculos en rendering, para objetos que piden " +"esto. Encendiendo proporciona profundidad importante cues para los objetos " +"comprendidos de 3D superficies. Imposibilitando puede dejar más rápido " +"rendering en escenas complejas" + +#: ../src/gui/mainFrame.cpp:5886 +msgid "" +"Enable/Disable weak randomisation (Galois linear feedback shift register). " +"Strong randomisation uses a much slower random selection method, but " +"provides better protection against inadvertent correlations, and is " +"recommended for final analyses" +msgstr "" +"Habilitar/Imposibilitar débil randomisation (Galois lineal feedback registro " +"de cambio). Fuerte randomisation utiliza una mucha selección aleatoria más " +"lenta método, pero proporciona protección mejor contra inadvertent " +"correlaciones, y es recomendado para análisis finales" + +#: ../src/gui/mainFrame.cpp:5888 +msgid "" +"Limit the number of points that can be displayed in the 3D scene. Does not " +"affect filter tree calculations. Disabling this can severely reduce " +"performance, due to large numbers of points being visible at once." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5889 +msgid "" +"Enable/Disable caching of intermediate results during filter updates. " +"Disabling caching will use less system RAM, though changes to any filter " +"property will cause the entire filter tree to be recomputed, greatly slowing " +"computations" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5891 +msgid "Camera data information" +msgstr "Información de dato del cámara" + +#: ../src/gui/mainFrame.cpp:5895 +msgid "Enable/disable visual effects on final 3D output" +msgstr "Habilitar/imposibilitar efectos visuales en final 3D producción" + +#: ../src/gui/mainFrame.cpp:5897 +msgid "Enable cropping post-process effect" +msgstr "Habilita cropping correo-efecto de proceso" + +#: ../src/gui/mainFrame.cpp:5900 +msgid "" +"Colour based 3D effect enable/disable - requires appropriate colour filter " +"3D glasses." +msgstr "" +"El Color basó 3D el efecto habilita/imposibilita - requiere appropriate " +"filtro de color 3D vasos." + +#: ../src/gui/mainFrame.cpp:5901 +msgid "Glasses colour mode" +msgstr "Modo de color de los vasos" + +#: ../src/gui/mainFrame.cpp:5903 +msgid "" +"Level of separation between left and right images, which sets 3D depth to " +"visual distortion tradeoff" +msgstr "" +"Nivel de separación entre imágenes izquierdas y correctas, el cual pone 3D " +"profundidad a distorsión visual tradeoff" + +#: ../src/gui/mainFrame.cpp:5907 +msgid "X" +msgstr "X" + +#: ../src/gui/mainFrame.cpp:5908 +msgid "Y" +msgstr "Y" + +#: ../src/gui/mainFrame.cpp:5909 +msgid "Save raw data to file" +msgstr "Salva dato crudo para archivar" + +#: ../src/gui/mainFrame.cpp:5910 +msgid "Copy raw data to clipboard" +msgstr "Copia dato crudo a clipboard" + +#: ../src/gui/mainFrame.cpp:5911 +msgid "Manage \"stashed\" data." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5912 +msgid "Program text output" +msgstr "Producción de texto del programa" + +#: ../src/gui/mainFrame.cpp:5913 +msgid "Select active camera, or type to create new named camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5914 +msgid "Remove the selected camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5915 +msgid "Perform cropping from coordinate frame of camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5916 +msgid "" +"Set the maximum amount of RAM to use in order to speed repeat computations" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5917 +msgid "Collapse the filter tree" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5918 +msgid "Expand the filter tree" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5919 +msgid "Process the filter tree, hold shift to purge cached filter data" +msgstr "" + +#: ../src/gui/mainFrame.cpp:6033 +msgid "Crop" +msgstr "Recortar" + +#: ../src/gui/mainFrame.cpp:6034 +msgid "Stereo" +msgstr "Estereo" + +#: ../src/gui/mainFrame.cpp:6051 ../src/backend/filters/externalProgram.cpp:596 +#: ../src/backend/filters/ionColour.cpp:352 +#: ../src/backend/filters/spectrumPlot.cpp:615 +msgid "Data" +msgstr "Data" + +#: ../src/gui/mainFrame.cpp:6052 +msgid "Cam" +msgstr "Cam" + +#: ../src/gui/mainFrame.cpp:6053 +msgid "Post" +msgstr "Postear" + +#: ../src/gui/mainFrame.cpp:6054 +msgid "Tools" +msgstr "Herramientas" + +#: ../src/gui/mainFrame.cpp:6072 +msgid "Raw" +msgstr "Datos en crudo" + +#: ../src/gui/mainFrame.cpp:6115 +msgid "Align Camera" +msgstr "" + +#: ../src/gui/mathglPane.cpp:264 +msgid "No plots selected." +msgstr "Ninguna parcela seleccionó." + +#: ../src/gui/mathglPane.cpp:1228 +msgid "" +"Unable to allocate requested memory.\n" +" Try a lower resolution, or save as vector (SVG)." +msgstr "" +"Incapaz a allocate memoria pedida.\n" +" Probar una resolución más baja, o salvar como vector (SVG)." + +#: ../src/gui/mathglPane.cpp:1230 +msgid "Plotting functions returned an error:\n" +msgstr "Plotting Funciona regresado un error:\n" + +#: ../src/gui/mathglPane.cpp:1232 +msgid "File readback check failed" +msgstr "Archivo readback el control falló" + +#: ../src/gui/mathglPane.cpp:1234 +msgid "Filesize during readback appears to be zero." +msgstr "Filesize Durante readback aparece para ser zero." + +#: ../src/3Depict.cpp:399 +msgid "File : " +msgstr "Archivo :" + +#: ../src/3Depict.cpp:399 +msgid " does not exist. Skipping" +msgstr " No existe. Skipping" + +#: ../src/backend/configFile.cpp:187 +msgid "Config file present, but is not valid (root node test)" +msgstr "" +"Config Presente de archivo, pero no es válido (prueba de nodo de la raíz)" + +#: ../src/backend/configFile.cpp:228 +msgid "Unable to interpret recent file entry" +msgstr "Incapaz de interpretar entrada de archivo reciente" + +#: ../src/backend/configFile.cpp:268 +msgid "Unable to determine filter type in defaults listing." +msgstr "Incapaz de determinar tipo de filtro en defaults listado." + +#: ../src/backend/configFile.cpp:605 +msgid "Online access for non win32/apple platforms is intentionally disabled, " +msgstr "" +"Online Acceso para no ganar32/plataformas de manzana es intencionadamente " +"imposibilitado, " + +#: ../src/backend/configFile.cpp:606 +msgid "" +"regardless of the settings you use here. Use your package manager to keep up-" +"to-date" +msgstr "" +"A toda costa del settings te utiliza aquí. Uso vuestro director de paquete " +"para mantener actual" + +#: ../src/backend/plot.cpp:28 ../src/backend/filters/algorithms/mass.cpp:25 +#: ../src/backend/filters/voxelise.cpp:130 +#: ../src/backend/filters/voxelise.cpp:136 +#: ../src/backend/filters/spectrumPlot.cpp:76 +msgid "None" +msgstr "Ninguno" + +#: ../src/backend/plot.cpp:29 +msgid "Moving avg." +msgstr "Moviendo avg." + +#: ../src/backend/plot.cpp:33 +msgid "Lines" +msgstr "Líneas" + +#: ../src/backend/plot.cpp:34 +msgid "Bars" +msgstr "Compases" + +#: ../src/backend/plot.cpp:35 +msgid "Steps" +msgstr "Pasos" + +#: ../src/backend/plot.cpp:36 +msgid "Stem" +msgstr "Raíz" + +#: ../src/backend/plot.cpp:37 +msgid "Points" +msgstr "Puntos" + +#: ../src/backend/plot.cpp:39 +msgid "Density" +msgstr "" + +#: ../src/backend/plot.cpp:40 +msgid "Scatter" +msgstr "" + +#: ../src/backend/plot.cpp:746 ../src/backend/plot.cpp:754 +msgid "Multiple data types" +msgstr "" + +#: ../src/backend/plot.cpp:1577 +msgid "error" +msgstr "error" + +#: ../src/backend/plot.cpp:1818 +msgid "Amplitude" +msgstr "" + +#: ../src/backend/filtertree.cpp:1150 +msgid "WARNING: Skipping node " +msgstr "AVISO: Skipping nodo " + +#: ../src/backend/filtertree.cpp:1150 +msgid " as it was not recognised" +msgstr " Cuando no fue recognised" + +#: ../src/backend/filtertree.cpp:1188 +msgid "Error processing node: " +msgstr "El Error que procesa nodo: " + +#: ../src/backend/filters/externalProgram.cpp:259 +msgid "Collate Input" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:348 +msgid "Execute" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:389 +msgid "Collate output" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:564 +#: ../src/backend/filters/externalProgram.cpp:578 +msgid "Command" +msgstr "Comando" + +#: ../src/backend/filters/externalProgram.cpp:567 +msgid "" +"Full command to send to operating system. See manual for escape sequence " +"meanings" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:571 +msgid "Work Dir" +msgstr "Trabajo Dir" + +#: ../src/backend/filters/externalProgram.cpp:574 +msgid "Directory to run the command in" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:581 +msgid "Cleanup input" +msgstr "Cleanup Entrada" + +#: ../src/backend/filters/externalProgram.cpp:584 +msgid "Erase input files when command completed" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:589 +msgid "Cache" +msgstr "Cache" + +#: ../src/backend/filters/externalProgram.cpp:592 +msgid "" +"Assume program does not alter its output, unless inputs from 3Depict are " +"altered" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:26 +msgid "Flat TOF" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:33 +msgid "INsufficient bins to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:34 +msgid "Insufficient counts to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:35 +msgid "Insufficient data to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:36 +msgid "Data did not appear to be random noise - cannot fit noise level" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:65 ../src/backend/filters/profile.cpp:53 +msgid "Sphere" +msgstr "Esfera" + +#: ../src/backend/filters/ionClip.cpp:66 +msgid "Plane" +msgstr "Plano" + +#: ../src/backend/filters/ionClip.cpp:67 +msgid "Cylinder" +msgstr "Cilindro" + +#: ../src/backend/filters/ionClip.cpp:68 +msgid "Aligned box" +msgstr "Aligned Caja" + +#: ../src/backend/filters/ionClip.cpp:498 +#: ../src/backend/filters/profile.cpp:995 +msgid "Primitive" +msgstr "Primitiva" + +#: ../src/backend/filters/ionClip.cpp:501 +msgid "Shape of clipping object" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:507 +#: ../src/backend/filters/profile.cpp:1001 +msgid "Show Primitive" +msgstr "El Espectáculo Primitivo" + +#: ../src/backend/filters/ionClip.cpp:510 +msgid "Display the 3D interaction object" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:515 +msgid "Invert Clip" +msgstr "Invert Clip" + +#: ../src/backend/filters/ionClip.cpp:518 +msgid "" +"Switch between retaining points inside (false) and outside (true) of " +"primitive" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:532 +#: ../src/backend/filters/profile.cpp:1058 +msgid "Position for centre of sphere" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:537 +#: ../src/backend/filters/ionClip.cpp:597 +#: ../src/backend/filters/spatialAnalysis.cpp:134 +#: ../src/backend/filters/profile.cpp:1041 +#: ../src/backend/filters/profile.cpp:1063 +msgid "Radius" +msgstr "Radio" + +#: ../src/backend/filters/ionClip.cpp:540 +#: ../src/backend/filters/profile.cpp:1066 +msgid "Radius of sphere" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:554 +msgid "Position that plane passes through" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:559 +msgid "Plane Normal" +msgstr "El Avión Normal" + +#: ../src/backend/filters/ionClip.cpp:562 +msgid "Perpendicular direction for plane" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:576 +msgid "Centre of cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:581 +#: ../src/backend/filters/spatialAnalysis.cpp:947 +#: ../src/backend/filters/profile.cpp:1025 +#: ../src/backend/filters/transform.cpp:1293 +msgid "Axis" +msgstr "Eje" + +#: ../src/backend/filters/ionClip.cpp:584 +msgid "Positive vector for cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:589 +#: ../src/backend/filters/profile.cpp:1033 +msgid "Lock Axis Mag." +msgstr "Eje de cerradura Mag." + +#: ../src/backend/filters/ionClip.cpp:592 +msgid "Prevent changing length of cylinder during 3D interaction" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:600 +#: ../src/backend/filters/profile.cpp:1044 +msgid "Radius of cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:613 +msgid "Centre of axis aligned box" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:618 +msgid "Corner offset" +msgstr "Esquina offset" + +#: ../src/backend/filters/ionClip.cpp:621 +msgid "Vector to corner of box" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:84 +#: ../src/backend/filters/clusterAnalysis.cpp:1060 +msgid "Size Distribution" +msgstr "Distribución de medida" + +#: ../src/backend/filters/clusterAnalysis.cpp:85 +msgid "Chemistry Distribution" +msgstr "Chemistry Distribución" + +#: ../src/backend/filters/clusterAnalysis.cpp:503 +msgid "No range data. Can't cluster." +msgstr "Ningún dato de gama. Puede no grupo." + +#: ../src/backend/filters/clusterAnalysis.cpp:514 +msgid "" +"No ranges selected for cluster \"core\". Cannot continue with clustering." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:523 +msgid "" +"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:689 +msgid "Morphology Plot" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:690 +msgid "\\lambda_1:\\lambda_2 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:691 +msgid "\\lambda_2:\\lambda_3 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:736 +msgid "No clusters had sufficient dimensionality to compute singular values" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:794 +msgid "Found :" +msgstr "Encontrado :" + +#: ../src/backend/filters/clusterAnalysis.cpp:796 +msgid " clusters" +msgstr " Grupos" + +#: ../src/backend/filters/clusterAnalysis.cpp:888 +msgid "Compositions (fractional, core+bulk)" +msgstr "Composiciones (fractional, núcleo+bulk)" + +#: ../src/backend/filters/clusterAnalysis.cpp:890 +msgid "Compositions (fractional, core only)" +msgstr "Composiciones (fractional, núcleo sólo)" + +#: ../src/backend/filters/clusterAnalysis.cpp:908 +msgid "Frequencies (core+bulk)" +msgstr "Frecuencias (núcleo+bulk)" + +#: ../src/backend/filters/clusterAnalysis.cpp:939 +msgid "Core Link + Erode" +msgstr "Vínculo de núcleo + Erosiona" + +#: ../src/backend/filters/clusterAnalysis.cpp:943 +#: ../src/backend/filters/clusterAnalysis.cpp:951 +#: ../src/backend/filters/spatialAnalysis.cpp:707 +#: ../src/backend/filters/spatialAnalysis.cpp:715 +#: ../src/backend/filters/transform.cpp:1156 +#: ../src/backend/filters/ionInfo.cpp:549 +msgid "Algorithm" +msgstr "Algoritmo" + +#: ../src/backend/filters/clusterAnalysis.cpp:947 +msgid "Cluster algorithm mode" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:958 +msgid "Core Classify" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:961 +msgid "" +"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:967 +msgid "Core Classify Dist" +msgstr "El Núcleo Clasifica Dist" + +#: ../src/backend/filters/clusterAnalysis.cpp:970 +msgid "Restrict only atoms by distance to be cluster sources" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:975 +msgid "Classify Knn Max" +msgstr "Clasifica Knn Max" + +#: ../src/backend/filters/clusterAnalysis.cpp:978 +msgid "" +"Require that the kth NN (this number) is within the classify distance, to be " +"a cluster source" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:984 +msgid "Core Link Dist" +msgstr "Vínculo de núcleo Dist" + +#: ../src/backend/filters/clusterAnalysis.cpp:987 +msgid "Distance between clusters to allow linking" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:992 +msgid "Bulk Link" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:995 +#: ../src/backend/filters/clusterAnalysis.cpp:1012 +msgid "Enable linking of non-cluster species - eg for composition analysis " +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1002 +msgid "Bulk Link (Envelope) Dist" +msgstr "Bulk Vínculo (Envelope) Dist" + +#: ../src/backend/filters/clusterAnalysis.cpp:1005 +msgid "" +"Distance from core points that form cluster that is used to grab surrounding " +"bulk points" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1009 +msgid "Erosion" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1018 +msgid "Erode Dist" +msgstr "Erosiona Dist" + +#: ../src/backend/filters/clusterAnalysis.cpp:1021 +msgid "" +"Distance from unclustered material in which bulk points are eroded from " +"cluster" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1028 +msgid "Clustering Params" +msgstr "Clustering Params" + +#: ../src/backend/filters/clusterAnalysis.cpp:1033 +msgid "Size Cropping" +msgstr "Medida Cropping" + +#: ../src/backend/filters/clusterAnalysis.cpp:1036 +msgid "Remove clusters based upon size distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1043 +msgid "Min Size" +msgstr "Tamaño Min" + +#: ../src/backend/filters/clusterAnalysis.cpp:1046 +msgid "Remove clusters below this size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1051 +msgid "Max Size" +msgstr "Tamaño Max" + +#: ../src/backend/filters/clusterAnalysis.cpp:1054 +msgid "Remove clusters above this size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1063 +msgid "Show number of clusters as a function of cluster size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1069 +msgid "Log Scale" +msgstr "Log Escala" + +#: ../src/backend/filters/clusterAnalysis.cpp:1072 +msgid "Use logarithmic scale for size distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1079 +msgid "Morphology Dist." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1082 +msgid "Create a plot showing cluster aspect ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1088 +msgid "Cluster Id" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1091 +msgid "Assign cluster output a unique per-cluster value (id)." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1098 +msgid "Chemistry Dist." +msgstr "Chemistry Dist." + +#: ../src/backend/filters/clusterAnalysis.cpp:1101 +msgid "Create a plot showing chemistry for each cluster size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1108 +#: ../src/backend/filters/spatialAnalysis.cpp:1006 +#: ../src/backend/filters/profile.cpp:1111 +#: ../src/backend/filters/ionInfo.cpp:465 +msgid "Normalise" +msgstr "Normaliza" + +#: ../src/backend/filters/clusterAnalysis.cpp:1111 +msgid "Convert cluster counts to composition" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1117 +msgid "Postprocess" +msgstr "Postprocess" + +#: ../src/backend/filters/clusterAnalysis.cpp:1136 +msgid "If selected, use as \"core\" ion type (can make clusters)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1141 +msgid "Core Ranges" +msgstr "Gamas de núcleo" + +#: ../src/backend/filters/clusterAnalysis.cpp:1147 +msgid "Enable/Disable All" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1151 +msgid "Enable/disable all ions" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1164 +msgid "" +"If selected, use as \"bulk\" ion type (can be included in existing clusters)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1169 +msgid "Bulk Ranges" +msgstr "Bulk Gamas" + +#: ../src/backend/filters/clusterAnalysis.cpp:1185 +msgid "Max. Sep + Erode" +msgstr "Max. Sep + Erosiona" + +#: ../src/backend/filters/clusterAnalysis.cpp:1938 +msgid " --------------------------- Parameter selection notice ------------- " +msgstr "" +" --------------------------- Aviso de selección del parámetro ------------- " + +#: ../src/backend/filters/clusterAnalysis.cpp:1939 +msgid "You have specified a bulk distance larger than half your link distance." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1940 +msgid "" +"You can do this; thats OK, but the output is no longer independent of the " +"computational process;" +msgstr "" +"Puedes hacer esto; thats OK, pero la producción es no más largo " +"independiente del computational proceso;" + +#: ../src/backend/filters/clusterAnalysis.cpp:1941 +msgid "" +"This will be a problem in the case where two or more clusters can equally " +"lay claim to a \"bulk\" ion. " +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1942 +msgid "" +" If your inter-cluster distance is sufficiently large (larger than your bulk " +"linking distance), then you can get away with this." +msgstr "" +" Si vuestro inter-distancia de grupo es suficientemente grande (más grande " +"que vuestro bulk enlazando distancia), entonces puedes conseguir fuera con " +"esto." + +#: ../src/backend/filters/clusterAnalysis.cpp:1943 +msgid "" +" In theory it is possible to \"join\" the clusters, but this has not been " +"implemented for speed reasons." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1944 +msgid "" +"If you want this, please contact the author, or just use the source to add " +"this in yourself." +msgstr "" +"Si quieres esto, complacer contactar el autor, o justo utilizar la fuente " +"para añadir esto en tú." + +#: ../src/backend/filters/clusterAnalysis.cpp:1945 +msgid "---------------------------------------------------------------------- " +msgstr "---------------------------------------------------------------------- " + +#: ../src/backend/filters/clusterAnalysis.cpp:1955 +#: ../src/backend/filters/spatialAnalysis.cpp:476 +#: ../src/backend/filters/spatialAnalysis.cpp:2166 +#: ../src/backend/filters/spatialAnalysis.cpp:2595 +#: ../src/backend/filters/spatialAnalysis.cpp:2887 +#: ../src/backend/filters/spatialAnalysis.cpp:3188 +#: ../src/backend/filters/spatialAnalysis.cpp:3334 +#: ../src/backend/filters/spatialAnalysis.cpp:3597 +#: ../src/backend/filters/spatialAnalysis.cpp:3810 +#: ../src/backend/filters/transform.cpp:1015 +msgid "Collate" +msgstr "Intercalar" + +#: ../src/backend/filters/clusterAnalysis.cpp:1974 +msgid "Build Core" +msgstr "Núcleo de complexión" + +#: ../src/backend/filters/clusterAnalysis.cpp:2002 +msgid "Core" +msgstr "Núcleo" + +#: ../src/backend/filters/clusterAnalysis.cpp:2125 +msgid "Bulk" +msgstr "Bulk" + +#: ../src/backend/filters/clusterAnalysis.cpp:2203 +msgid "Erode" +msgstr "Erosión" + +#: ../src/backend/filters/clusterAnalysis.cpp:2281 +msgid "Re-Collate" +msgstr "Re-Cotejar" + +#: ../src/backend/filters/clusterAnalysis.cpp:2336 +msgid "Classify Core" +msgstr "Clasifica Núcleo" + +#: ../src/backend/filters/clusterAnalysis.cpp:2427 +msgid "Build Bulk" +msgstr "Complexión Bulk" + +#: ../src/backend/filters/clusterAnalysis.cpp:2675 +#: ../src/backend/filters/clusterAnalysis.cpp:2878 +msgid "Cluster Size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:2676 +#: ../src/backend/filters/clusterAnalysis.cpp:2882 +msgid "Frequency" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:2880 +msgid "Composition" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:116 +msgid "None (Raw count)" +msgstr "Ninguno (Crudo contar)" + +#: ../src/backend/filters/voxelise.cpp:117 +msgid "Volume (Density)" +msgstr "Volumen (Densidad)" + +#: ../src/backend/filters/voxelise.cpp:118 +msgid "All Ions (conc)" +msgstr "Todos los Iones (conc)" + +#: ../src/backend/filters/voxelise.cpp:119 +msgid "Ratio (Num/Denom)" +msgstr "Proporción (Num/Denom)" + +#: ../src/backend/filters/voxelise.cpp:123 +msgid "Point Cloud" +msgstr "Nube de punto" + +#: ../src/backend/filters/voxelise.cpp:124 +msgid "Isosurface" +msgstr "Isosurface" + +#: ../src/backend/filters/voxelise.cpp:125 +msgid "Axial slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:126 +msgid "Slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:131 +msgid "Gaussian (blur)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:132 +msgid "Lapl. of Gauss. (edges)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:137 +msgid "Linear" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:404 +msgid "Counting" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:579 +msgid "Gauss Smooth" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:585 +msgid "Calc. Laplace" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:609 +msgid "Voxel Limits (min,max): (" +msgstr "Voxel Límites (min,max): (" + +#: ../src/backend/filters/voxelise.cpp:619 +#: ../src/backend/filters/voxelise.cpp:1139 +msgid "Representation" +msgstr "Representacion" + +#: ../src/backend/filters/voxelise.cpp:924 +msgid "Fixed width" +msgstr "Anchura fija" + +#: ../src/backend/filters/voxelise.cpp:928 +msgid "If true, use fixed size voxels, otherwise use fixed count" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:934 +msgid "Bin width x" +msgstr "Ancho de cubo x" + +#: ../src/backend/filters/voxelise.cpp:938 +msgid "Voxel size in X direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:942 +msgid "Bin width y" +msgstr "Ancho de cubo y" + +#: ../src/backend/filters/voxelise.cpp:945 +msgid "Voxel size in Y direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:951 +msgid "Bin width z" +msgstr "Ancho de cubo z" + +#: ../src/backend/filters/voxelise.cpp:954 +msgid "Voxel size in Z direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:961 +msgid "Num bins x" +msgstr "Num Cubos x" + +#: ../src/backend/filters/voxelise.cpp:965 +msgid "Number of voxels to use in X direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:970 +msgid "Num bins y" +msgstr "Num Cubos y" + +#: ../src/backend/filters/voxelise.cpp:973 +msgid "Number of voxels to use in Y direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:979 +msgid "Num bins z" +msgstr "Num Cubos z" + +#: ../src/backend/filters/voxelise.cpp:981 +msgid "Number of voxels to use in Z direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1011 +msgid "Normalise by" +msgstr "Normalise Por" + +#: ../src/backend/filters/voxelise.cpp:1014 +msgid "Method to use to normalise scalar value in each voxel" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1017 +msgid "Computation" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1024 +#: ../src/backend/filters/spatialAnalysis.cpp:1122 +#: ../src/backend/filters/spatialAnalysis.cpp:1143 +msgid "Numerator" +msgstr "Numerador" + +#: ../src/backend/filters/voxelise.cpp:1027 +msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1044 +msgid "Enable this ion for numerator" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1056 +#: ../src/backend/filters/voxelise.cpp:1077 +#: ../src/backend/filters/spatialAnalysis.cpp:1150 +#: ../src/backend/filters/spatialAnalysis.cpp:1169 +msgid "Denominator" +msgstr "Denominador" + +#: ../src/backend/filters/voxelise.cpp:1059 +msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1073 +msgid "Enable this ion for denominator contribution" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1095 +#: ../src/backend/filters/voxelise.cpp:1126 +msgid "Filtering" +msgstr "Filtrar" + +#: ../src/backend/filters/voxelise.cpp:1099 +msgid "Smoothing method to use on voxels" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1102 +msgid "Processing" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1108 +msgid "Standard Dev" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1112 +msgid "Filtering Scale" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1118 +msgid "Kernel Size" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1122 +msgid "" +"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1142 +msgid "3D display method" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1153 +msgid "Spot size" +msgstr "Medida de sitio" + +#: ../src/backend/filters/voxelise.cpp:1156 +msgid "Size of the spots to use for display" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1161 +#: ../src/backend/filters/voxelise.cpp:1196 +#: ../src/backend/filters/voxelise.cpp:1268 +#: ../src/backend/filters/voxelise.cpp:1358 +msgid "Transparency" +msgstr "Transparencia" + +#: ../src/backend/filters/voxelise.cpp:1164 +msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1173 +msgid "Surf. param." +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1176 +msgid "Isovalue" +msgstr "Isovalue" + +#: ../src/backend/filters/voxelise.cpp:1179 +msgid "Scalar value to show as isosurface" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1184 +#: ../src/backend/filters/voxelise.cpp:1249 +#: ../src/backend/filters/voxelise.cpp:1338 +#: ../src/backend/filters/spatialAnalysis.cpp:2212 +#: ../src/backend/filters/spatialAnalysis.cpp:2265 +msgid "Surface" +msgstr "Superficie" + +#: ../src/backend/filters/voxelise.cpp:1191 +msgid "Colour of isosurface" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1199 +#: ../src/backend/filters/voxelise.cpp:1271 +#: ../src/backend/filters/voxelise.cpp:1361 +msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1210 +#: ../src/backend/filters/voxelise.cpp:1317 +msgid "Slice param." +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1218 +msgid "Slice Axis" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1221 +msgid "Normal for the planar slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1228 +msgid "Slice Coord" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1231 +msgid "Fractional coordinate that slice plane passes through" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1236 +msgid "Interp. Mode" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1244 +msgid "Interpolation mode for direction normal to slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1260 +#: ../src/backend/filters/voxelise.cpp:1350 +msgid "Colour mode" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1263 +#: ../src/backend/filters/voxelise.cpp:1353 +#: ../src/backend/filters/ionColour.cpp:293 +msgid "Colour scheme used to assign points colours by value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1276 +#: ../src/backend/filters/voxelise.cpp:1366 +#: ../src/backend/filters/ionColour.cpp:305 +msgid "Show Bar" +msgstr "Barra de espectáculo" + +#: ../src/backend/filters/voxelise.cpp:1279 +msgid "Display colour bar in 3D view?" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1284 +#: ../src/backend/filters/voxelise.cpp:1373 +msgid "Auto Bounds" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1285 +#: ../src/backend/filters/voxelise.cpp:1374 +msgid "Auto-compute min/max values in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1295 +#: ../src/backend/filters/voxelise.cpp:1384 +#: ../src/backend/filters/ionColour.cpp:337 +msgid "Map start" +msgstr "Inicio de mapa" + +#: ../src/backend/filters/voxelise.cpp:1296 +#: ../src/backend/filters/voxelise.cpp:1385 +#: ../src/backend/filters/ionColour.cpp:338 +msgid "Assign points with this value to the first colour in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1303 +#: ../src/backend/filters/voxelise.cpp:1392 +#: ../src/backend/filters/ionColour.cpp:345 +msgid "Map end" +msgstr "Fin de mapa" + +#: ../src/backend/filters/voxelise.cpp:1304 +#: ../src/backend/filters/voxelise.cpp:1393 +#: ../src/backend/filters/ionColour.cpp:346 +msgid "Assign points with this value to the last colour in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1320 +msgid "Slice Offset" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1323 +msgid "Point on plane for slice, in 0->1 coordinates" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1330 +msgid "Slice Normal" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1333 +msgid "Normal vector for slice" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:289 +msgid "Colour Map" +msgstr "Mapa de color" + +#: ../src/backend/filters/ionColour.cpp:297 +msgid "Reverse map" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:298 +msgid "Reverse the colour scale" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:306 +msgid "Display the colour legend in the 3D view" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:312 +msgid "Opacity" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:313 +msgid "How see-through to make the legend (0- transparent, 1- solid)" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:320 +msgid "Num Colours" +msgstr "Num Colores" + +#: ../src/backend/filters/ionColour.cpp:322 +msgid "Number of unique colours to use in colour map" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:327 +msgid "Auto bounds" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:329 +msgid "Automatically scale colour to min/max of data range" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:460 ../src/backend/filter.cpp:197 +msgid "Aborted" +msgstr "Abortado" + +#: ../src/backend/filters/spatialAnalysis.cpp:123 +msgid "Local Density" +msgstr "Densidad local" + +#: ../src/backend/filters/spatialAnalysis.cpp:124 +msgid "Density Filtering" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:125 +msgid "Radial Distribution" +msgstr "Distribución radial" + +#: ../src/backend/filters/spatialAnalysis.cpp:126 +msgid "Axial Distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:127 +msgid "Binomial Distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:128 +msgid "Point Em/Replacement" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:129 +msgid "Local Chemistry" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:133 +msgid "Neighbour Count" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:484 +msgid "Load" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:539 +#: ../src/backend/filters/spatialAnalysis.cpp:2198 +#: ../src/backend/filters/spatialAnalysis.cpp:2251 +#: ../src/backend/filters/spatialAnalysis.cpp:2601 +#: ../src/backend/filters/spatialAnalysis.cpp:2893 +#: ../src/backend/filters/spatialAnalysis.cpp:3200 +#: ../src/backend/filters/spatialAnalysis.cpp:3829 +msgid "Build" +msgstr "Construir" + +#: ../src/backend/filters/spatialAnalysis.cpp:588 +#: ../src/backend/filters/spatialAnalysis.cpp:3222 +#: ../src/backend/filters/spatialAnalysis.cpp:3718 +#: ../src/backend/filters/spatialAnalysis.cpp:3846 +msgid "Compute" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:710 +msgid "Spatial analysis algorithm to use" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:734 +#: ../src/backend/filters/spatialAnalysis.cpp:785 +msgid "Stop Mode" +msgstr "Modo de parón" + +#: ../src/backend/filters/spatialAnalysis.cpp:737 +msgid "Method to use to terminate algorithm when examining each point" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:744 +msgid "NN Max" +msgstr "NN Max" + +#: ../src/backend/filters/spatialAnalysis.cpp:747 +msgid "Maximum number of neighbours to examine" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:754 +msgid "Normalise bins" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:757 +msgid "" +"Normalise counts by binwidth. Needed when comparing NN histograms against " +"one another" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:763 +msgid "Show Random" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:766 +msgid "Show a fitted (density matched) theoretical distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:777 +msgid "Dist Max" +msgstr "Dist Max" + +#: ../src/backend/filters/spatialAnalysis.cpp:780 +msgid "Maximum distance from each point for search" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:794 +#: ../src/backend/filters/spatialAnalysis.cpp:928 +#: ../src/backend/filters/profile.cpp:1089 +msgid "Num Bins" +msgstr "Num Cubos" + +#: ../src/backend/filters/spatialAnalysis.cpp:797 +#: ../src/backend/filters/spatialAnalysis.cpp:931 +msgid "Number of bins for output 1D RDF plot" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:803 +msgid "Surface Remove" +msgstr "La Superficie Saca" + +#: ../src/backend/filters/spatialAnalysis.cpp:806 +msgid "" +"Exclude surface as part of source to minimise bias in RDF (at cost of " +"increased noise)" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:813 +msgid "Remove Dist" +msgstr "Saca Dist" + +#: ../src/backend/filters/spatialAnalysis.cpp:816 +msgid "Minimum distance to remove from surface" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:824 +#: ../src/backend/filters/spatialAnalysis.cpp:936 +msgid "Plot colour " +msgstr "Color de parcela " + +#: ../src/backend/filters/spatialAnalysis.cpp:827 +#: ../src/backend/filters/spatialAnalysis.cpp:939 +msgid "Colour of output plot" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:831 +#: ../src/backend/filters/spatialAnalysis.cpp:917 +#: ../src/backend/filters/spatialAnalysis.cpp:922 +#: ../src/backend/filters/spatialAnalysis.cpp:954 +#: ../src/backend/filters/spatialAnalysis.cpp:993 +msgid "Alg. Params." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:844 +#: ../src/backend/filters/spatialAnalysis.cpp:1096 +msgid "Source" +msgstr "Fuente" + +#: ../src/backend/filters/spatialAnalysis.cpp:847 +msgid "Ions to use for initiating RDF search" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:860 +#: ../src/backend/filters/spatialAnalysis.cpp:1112 +#: ../src/backend/filters/spatialAnalysis.cpp:1138 +msgid "Enable/disable ion as source" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:865 +#: ../src/backend/filters/spatialAnalysis.cpp:1117 +msgid "Source Ion" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:875 +#: ../src/backend/filters/spatialAnalysis.cpp:1153 +msgid "Enable/disable all ions as target" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:887 +#: ../src/backend/filters/spatialAnalysis.cpp:1165 +msgid "Enable/disable this ion as target" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:891 +msgid "Target Ion" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:901 +msgid "Cutoff" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:904 +msgid "Remove points with local density above/below this value" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:910 +msgid "Retain Upper" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:913 +msgid "Retain either points with density above (enabled) or below cutoff" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:950 +msgid "Vector along which to calculate distribution function" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:961 +msgid "Block size" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:964 +msgid "Number of ions to use per block" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:971 +msgid "Max Block Aspect" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:974 +msgid "" +"Maximum allowable block aspect ratio. Blocks above this aspect are " +"discarded. Setting too high decreases correlation strength. Too low causes " +"loss of statistical power." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:985 +msgid "Extrusion Direction" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:988 +msgid "Direction in which blocks are extended during construction." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:997 +msgid "Plot Counts" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1000 +msgid "Show the counts in the binomial histogram" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1009 +msgid "" +"Normalise the counts in the binomial histogram to a probability density " +"function" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1013 +msgid "Expected Freq" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1016 +msgid "" +"Show the theoretically expected probability density function for a random " +"dataset with the same mean" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1024 +msgid "Display Grid" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1027 +msgid "Show the extruded grid in the 3D view. This may be slow" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1031 +msgid "View Options" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1037 +msgid "Data File" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1041 +msgid "Pos file of points to subtract/replace/etc" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1046 +msgid "Match Tol." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1049 +msgid "Tolerance to allow for matching" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1065 +msgid "Replacment condition" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1071 +msgid "Replace value" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1074 +msgid "Use value data from file when replacing ions" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1079 +msgid "Replacement" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1099 +msgid "Enable/disable all ions as source" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1125 +msgid "Ions to use as Numerator for conc. calculation" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1681 +msgid "Spatial analysis aborted by user" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1682 +msgid "Insufficient memory for binomial. Reduce input size?" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1683 +msgid "Required range data not present" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1684 +msgid "Unable to generate usable binomial grid" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1686 +msgid "Insufficient points to continue" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1687 +msgid "Unable to load file" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:2305 +#: ../src/backend/filters/spatialAnalysis.cpp:2624 +#: ../src/backend/filters/spatialAnalysis.cpp:2917 +msgid "Analyse" +msgstr "Analiza" + +#: ../src/backend/filters/spatialAnalysis.cpp:2384 +#: ../src/backend/filters/spatialAnalysis.cpp:2474 +#: ../src/backend/filters/spatialAnalysis.cpp:2540 +msgid "Radial Distance" +msgstr "Distancia radial" + +#: ../src/backend/filters/spatialAnalysis.cpp:2386 +#: ../src/backend/filters/spatialAnalysis.cpp:2479 +msgid "Count/Distance" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:2391 +#: ../src/backend/filters/spatialAnalysis.cpp:2484 +msgid "NN Freq." +msgstr "NN Freq." + +#: ../src/backend/filters/spatialAnalysis.cpp:2531 +msgid "Warning, " +msgstr "Advertencia, " + +#: ../src/backend/filters/spatialAnalysis.cpp:2532 +msgid "" +" points were unable to find neighbour points that exceeded the search " +"radius, and thus terminated prematurely" +msgstr "" +" Los Puntos eran incapaces de encontrar puntos de vecino que superaron la " +"búsqueda radius, y por ello terminated prematurely" + +#: ../src/backend/filters/spatialAnalysis.cpp:2542 +msgid " RDF" +msgstr " RDF" + +#: ../src/backend/filters/spatialAnalysis.cpp:2823 +#: ../src/backend/filters/spatialAnalysis.cpp:3123 +msgid "Number Density (\\#/Vol^3)" +msgstr "Densidad de número (\\#/Vol^3)" + +#: ../src/backend/filters/spatialAnalysis.cpp:2848 +#: ../src/backend/filters/spatialAnalysis.cpp:3145 +msgid "Warning," +msgstr "Advertencia, " + +#: ../src/backend/filters/spatialAnalysis.cpp:2849 +#: ../src/backend/filters/spatialAnalysis.cpp:3146 +msgid " points were un-analysable. These have been dropped" +msgstr " Los Puntos eran un-analysable. Estos han sido caídos" + +#: ../src/backend/filters/spatialAnalysis.cpp:2871 +#: ../src/backend/filters/spatialAnalysis.cpp:3168 +msgid "And so on..." +msgstr "Y tan encima..." + +#: ../src/backend/filters/spatialAnalysis.cpp:3268 +msgid "Insufficient points to complete analysis" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3291 +msgid "Axial Distance" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3293 +msgid " 1D Dist. Func." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3344 +msgid "Binomial" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3477 +#: ../src/backend/filters/spatialAnalysis.cpp:3542 +msgid "Ions in Block" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3479 +#: ../src/backend/filters/spatialAnalysis.cpp:3544 +#: ../src/backend/filters/spectrumPlot.cpp:79 +msgid "Probability" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3546 +msgid "Count (blocks)" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3611 +msgid "Build Numerator" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3625 +msgid "Build Denominator" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3961 +msgid "Relative Conc. (%)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:51 +msgid "Cylinder (axial)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:52 +msgid "Cylinder (radial)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:595 +msgid "Distance" +msgstr "Distancia" + +#: ../src/backend/filters/profile.cpp:603 +msgid "Fraction" +msgstr "Fracción" + +#: ../src/backend/filters/profile.cpp:605 +msgid "Density (\\frac{\\#}{len^3})" +msgstr "" + +#: ../src/backend/filters/profile.cpp:632 +msgid "Freq. Profile" +msgstr "Freq. Perfil" + +#: ../src/backend/filters/profile.cpp:684 +msgid "No data remained in profile - cannot display result" +msgstr "" + +#: ../src/backend/filters/profile.cpp:971 +msgid "Total Density" +msgstr "" + +#: ../src/backend/filters/profile.cpp:975 +msgid "Do not do per-species analysis, perform density computation only" +msgstr "" + +#: ../src/backend/filters/profile.cpp:989 +msgid "Primitive type" +msgstr "" + +#: ../src/backend/filters/profile.cpp:993 +msgid "Basic shape to use for profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1005 +msgid "Display the 3D composition profile interaction object" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1020 +msgid "Position for centre of cylinder" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1028 +msgid "Vector between ends of cylinder" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1036 +msgid "Prevent length of cylinder changing during interaction" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1079 +msgid "Fixed Bin Num" +msgstr "Cubo fijo Num" + +#: ../src/backend/filters/profile.cpp:1082 +msgid "" +"If true, use a fixed number of bins for profile, otherwise use fixed step " +"size" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1094 +msgid "Number of bins to use for profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1100 +#: ../src/backend/filters/spectrumPlot.cpp:583 +msgid "Bin width" +msgstr "Ancho de cubo" + +#: ../src/backend/filters/profile.cpp:1106 +msgid "Size of each bin in profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1115 +msgid "Convert bin counts into relative frequencies in each bin" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1119 +msgid "Min. events" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1123 +msgid "Drop data that does not have this many events" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1126 +msgid "Settings" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1148 +#: ../src/backend/filters/spectrumPlot.cpp:672 +msgid "Plot Type" +msgstr "Tipo de Trazo" + +#: ../src/backend/filters/profile.cpp:1151 +msgid "Visual style for plot" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1162 +msgid "Colour of plot" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1178 +msgid "Err. Estimator" +msgstr "Err. Estimator" + +#: ../src/backend/filters/profile.cpp:1181 +msgid "Method of estimating error associated with each bin" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1188 +msgid "Avg. Window" +msgstr "Avg. Ventana" + +#: ../src/backend/filters/profile.cpp:1191 +msgid "Number of bins to include in moving average filter" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1195 +msgid "Error analysis" +msgstr "" + +#: ../src/backend/filters/transform.cpp:84 +msgid "Translate" +msgstr "Trasladar" + +#: ../src/backend/filters/transform.cpp:85 +msgid "Scale (isotropic)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:86 +msgid "Scale (anisotropic)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:87 +msgid "Rotate" +msgstr "Girar" + +#: ../src/backend/filters/transform.cpp:88 +msgid "Value Shuffle" +msgstr "Valor Shuffle" + +#: ../src/backend/filters/transform.cpp:89 +msgid "Spatial Noise" +msgstr "Ruido espacial" + +#: ../src/backend/filters/transform.cpp:90 +msgid "Translate Value" +msgstr "Traduce Valor" + +#: ../src/backend/filters/transform.cpp:91 +msgid "Crop Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:95 +msgid "Specify" +msgstr "Especifica" + +#: ../src/backend/filters/transform.cpp:96 +msgid "Boundbox Centre" +msgstr "Boundbox Centro" + +#: ../src/backend/filters/transform.cpp:97 +msgid "Mass Centre" +msgstr "Centro de masa" + +#: ../src/backend/filters/transform.cpp:1080 +msgid "Shuffle" +msgstr "Orden aleatorio" + +#: ../src/backend/filters/transform.cpp:1104 +msgid "Splice" +msgstr "Reunir" + +#: ../src/backend/filters/transform.cpp:1152 +msgid "Algorithm to use to transform point data" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1169 +msgid "Origin mode" +msgstr "Modo de origen" + +#: ../src/backend/filters/transform.cpp:1172 +msgid "Select how transform origin is computed" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1177 +msgid "Show marker" +msgstr "Espectáculo marker" + +#: ../src/backend/filters/transform.cpp:1181 +msgid "Display an interactive object to set transform origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1183 +msgid "Display a small marker to denote transform origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1199 +msgid "Translation" +msgstr "Translation" + +#: ../src/backend/filters/transform.cpp:1202 +msgid "Translation vector for transform" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1214 +msgid "Offset" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1218 +msgid "Scalar to use to offset each point's associated value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1235 +#: ../src/backend/filters/transform.cpp:1262 +msgid "Origin of scale transform" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1242 +#: ../src/backend/filters/transform.cpp:1269 +msgid "Scale Fact." +msgstr "Hecho de escala." + +#: ../src/backend/filters/transform.cpp:1245 +#: ../src/backend/filters/transform.cpp:1272 +msgid "Enlargement factor for scaling around origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1288 +msgid "Origin of rotation" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1296 +msgid "Axis around which to revolve" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1301 +msgid "Angle (deg)" +msgstr "ángulo (deg)" + +#: ../src/backend/filters/transform.cpp:1304 +msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1321 +msgid "Noise Type" +msgstr "Tipo de ruido" + +#: ../src/backend/filters/transform.cpp:1324 +msgid "Method to use to degrade point data" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1331 +msgid "Noise level" +msgstr "Nivel de ruido" + +#: ../src/backend/filters/transform.cpp:1333 +msgid "Standard dev." +msgstr "Estándar dev." + +#: ../src/backend/filters/transform.cpp:1341 +msgid "Amplitude of noise" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1355 +msgid "Min Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1359 +msgid "Minimum value to use for crop" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1363 +msgid "Max Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1367 +msgid "Maximum value to use for crop" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1376 +msgid "Transform Params" +msgstr "Transforma Params" + +#: ../src/backend/filters/transform.cpp:1745 +msgid "White" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1747 +msgid "Gaussian" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:64 +msgid "Box only" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:65 +msgid "Tick" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:66 +msgid "Dimension" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:572 +msgid "If true, show box, otherwise hide box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:585 +msgid "Style" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:588 +msgid "Box display mode" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:591 +msgid "Display mode" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:600 +msgid "Fixed Tick Num" +msgstr "Fijo Tick Num" + +#: ../src/backend/filters/boundingBox.cpp:604 +msgid "" +"If true, evenly use specified number of ticks. Otherwise, use distance to " +"determine tick count" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:612 +msgid "Num X" +msgstr "Num X" + +#: ../src/backend/filters/boundingBox.cpp:615 +msgid "Tick count in X direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:620 +msgid "Num Y" +msgstr "Num Y" + +#: ../src/backend/filters/boundingBox.cpp:623 +msgid "Tick count in Y direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:628 +msgid "Num Z" +msgstr "Num Z" + +#: ../src/backend/filters/boundingBox.cpp:631 +msgid "Tick count in Z direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:637 +msgid "Spacing X" +msgstr "Espaciando X" + +#: ../src/backend/filters/boundingBox.cpp:641 +msgid "Distance between ticks on X axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:645 +msgid "Spacing Y" +msgstr "Espaciando Y" + +#: ../src/backend/filters/boundingBox.cpp:649 +msgid "Distance between ticks on Y axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:653 +msgid "Spacing Z" +msgstr "Espaciando Z" + +#: ../src/backend/filters/boundingBox.cpp:657 +msgid "Distance between ticks on Z axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:665 +msgid "Ticks X" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:669 +msgid "Display tick marks on X axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:673 +msgid "Ticks Y" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:677 +msgid "Display tick marks on Y axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:681 +msgid "Ticks Z" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:685 +msgid "Display tick marks on Z axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:688 +msgid "Tick marks" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:695 +msgid "Box Colour" +msgstr "Color de caja" + +#: ../src/backend/filters/boundingBox.cpp:699 +msgid "Colour of the bounding box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:704 +msgid "Line thickness" +msgstr "Grosor de línea" + +#: ../src/backend/filters/boundingBox.cpp:708 +msgid "Thickness of the lines used to draw the box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:716 +#: ../src/backend/filters/annotation.cpp:856 +msgid "Font Size" +msgstr "Tamaño de tipografía" + +#: ../src/backend/filters/boundingBox.cpp:719 +msgid "Relative size for text" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:724 +msgid "Abs. Coords" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:727 +msgid "Show labels using aboslute coo-ordinates" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:73 +msgid "Arrow" +msgstr "Flecha" + +#: ../src/backend/filters/annotation.cpp:74 +msgid "Text" +msgstr "Texto" + +#: ../src/backend/filters/annotation.cpp:75 +msgid "Arrow+Text" +msgstr "Texto+de flecha" + +#: ../src/backend/filters/annotation.cpp:76 +msgid "Angle" +msgstr "Ángulo" + +#: ../src/backend/filters/annotation.cpp:77 +msgid "Ruler" +msgstr "Regla" + +#: ../src/backend/filters/annotation.cpp:177 ../src/backend/filter.cpp:55 +msgid "Draw" +msgstr "Sorteo" + +#: ../src/backend/filters/annotation.cpp:532 +msgid "Enable" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:535 +msgid "Enable/disable annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:556 +msgid "Type or style of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:572 +#: ../src/backend/filters/annotation.cpp:676 +msgid "Text of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:580 +msgid "Position of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:584 +#: ../src/backend/filters/annotation.cpp:691 +#: ../src/backend/filters/annotation.cpp:750 +#: ../src/backend/filters/annotation.cpp:839 +msgid "Up dir" +msgstr "Arriba de dir" + +#: ../src/backend/filters/annotation.cpp:588 +#: ../src/backend/filters/annotation.cpp:843 +msgid "Vector for up direction of annotation text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:592 +#: ../src/backend/filters/annotation.cpp:698 +#: ../src/backend/filters/annotation.cpp:742 +#: ../src/backend/filters/annotation.cpp:847 +msgid "Across dir" +msgstr "Across dir" + +#: ../src/backend/filters/annotation.cpp:596 +#: ../src/backend/filters/annotation.cpp:851 +msgid "Reading direction for annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:601 +#: ../src/backend/filters/annotation.cpp:683 +#: ../src/backend/filters/annotation.cpp:777 +msgid "Text size" +msgstr "Medida de texto" + +#: ../src/backend/filters/annotation.cpp:605 +#: ../src/backend/filters/annotation.cpp:687 +#: ../src/backend/filters/annotation.cpp:859 +msgid "Relative size of annotation text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:617 +#: ../src/backend/filters/annotation.cpp:658 +msgid "3D position for tail of arrow" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:625 +#: ../src/backend/filters/annotation.cpp:667 +msgid "3D Position to which arrow points" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:628 +#: ../src/backend/filters/annotation.cpp:738 +msgid "Positioning" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:633 +#: ../src/backend/filters/annotation.cpp:705 +msgid "Tip radius" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:637 +msgid "Size of the arrow head" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:641 +msgid "Line size" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:645 +msgid "Thickness of line used to draw arrow stem" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:679 +msgid "Options" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:715 +msgid "Position A" +msgstr "Posición Un" + +#: ../src/backend/filters/annotation.cpp:719 +msgid "Location of first non-central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:723 +msgid "Origin " +msgstr "Origen" + +#: ../src/backend/filters/annotation.cpp:727 +msgid "Location of central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:731 +msgid "Position B" +msgstr "Posición B" + +#: ../src/backend/filters/annotation.cpp:735 +msgid "Location of second non-central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:746 +msgid "Reading direction for angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:751 +msgid "Vector for up direction of angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:759 +msgid "Reflexive" +msgstr "Reflexive" + +#: ../src/backend/filters/annotation.cpp:762 +msgid "Measure interor (enabled) or exterior angle (disabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:767 +msgid "Show Angle" +msgstr "ángulo de espectáculo" + +#: ../src/backend/filters/annotation.cpp:771 +msgid "Display angle text (when enabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:781 +msgid "Size of angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:799 +msgid "Digit format" +msgstr "Formato de dígito" + +#: ../src/backend/filters/annotation.cpp:803 +msgid "" +"Format of angle text; # for numeral position, '.' for separator, eg ##.## " +"gives 12.34" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:809 +#: ../src/backend/filters/annotation.cpp:894 +msgid "Sphere size" +msgstr "Sphere Medida" + +#: ../src/backend/filters/annotation.cpp:813 +#: ../src/backend/filters/annotation.cpp:898 +msgid "Marker sphere size for manipulating tool" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:827 +msgid "Ruler beginning 3D location" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:835 +msgid "Ruler finish 3D location" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:865 +msgid "Fixed ticks" +msgstr "Fijo ticks" + +#: ../src/backend/filters/annotation.cpp:868 +msgid "" +"Use fixed (enabled) number of text markers, or one every fixed distance " +"(disabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:875 +msgid "Num Ticks" +msgstr "Num Ticks" + +#: ../src/backend/filters/annotation.cpp:878 +msgid "Number of tick marks along ruler" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:885 +msgid "Tick Spacing" +msgstr "Tick Espaciando" + +#: ../src/backend/filters/annotation.cpp:888 +msgid "Distance between tick marks along ruler" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:912 +msgid "Colour for ruler and ticks" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:192 +msgid "Sampling" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:448 +msgid "By Count" +msgstr "Por Contar" + +#: ../src/backend/filters/ionDownsample.cpp:451 +msgid "Sample up to a fixed number of ions" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:457 +msgid "Per Species" +msgstr "Por Especie" + +#: ../src/backend/filters/ionDownsample.cpp:461 +msgid "Use species specific (from ranging) sampling values" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:491 +msgid "Sampling value for species" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:498 +#: ../src/backend/filters/ionInfo.cpp:317 +msgid "Unranged" +msgstr "Unranged" + +#: ../src/backend/filters/ionDownsample.cpp:507 +#: ../src/backend/filters/ionDownsample.cpp:531 +msgid "Sampling rates" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:515 +msgid "Output Count" +msgstr "La Producción Cuenta" + +#: ../src/backend/filters/ionDownsample.cpp:518 +msgid "Sample up to this value of points" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:523 +msgid "Out Fraction" +msgstr "Fuera de Fracción" + +#: ../src/backend/filters/ionDownsample.cpp:527 +msgid "Sample this fraction of points" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:37 +msgid "Rectilinear" +msgstr "Rectilínea" + +#: ../src/backend/filters/ionInfo.cpp:38 +msgid "Convex hull" +msgstr "Convex hull" + +#: ../src/backend/filters/ionInfo.cpp:200 +msgid "No ions" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:226 +#: ../src/backend/filters/spectrumPlot.cpp:433 +msgid "" +"Background fit failed - input data was considered ill formed (gauss-test)" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:227 +msgid "Following data has not been corrected" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:279 +msgid "--Counts--" +msgstr "--Cuenta--" + +#: ../src/backend/filters/ionInfo.cpp:289 +msgid "Total Ranged\t" +msgstr "El Total Abarcó\t" + +#: ../src/backend/filters/ionInfo.cpp:294 +msgid "Total (incl. unranged)\t" +msgstr "Total (incl. unranged)\t" + +#: ../src/backend/filters/ionInfo.cpp:307 +msgid "n/a" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:330 +msgid "Number of points : " +msgstr "Número de puntos : " + +#: ../src/backend/filters/ionInfo.cpp:359 +msgid "Rectilinear Bounds : " +msgstr "Rectilinear Bounds : " + +#: ../src/backend/filters/ionInfo.cpp:364 +msgid "Volume (len^3): " +msgstr "Volumen (len^3): " + +#: ../src/backend/filters/ionInfo.cpp:381 +msgid "Convex Volume (len^3): " +msgstr "Convex Volumen (len^3): " + +#: ../src/backend/filters/ionInfo.cpp:384 +msgid "Unable to compute volume" +msgstr "Incapaz de computar volumen" + +#: ../src/backend/filters/ionInfo.cpp:413 +msgid "Ranged Density (pts/vol):" +msgstr "Densidad abarcada (pts/vol):" + +#: ../src/backend/filters/ionInfo.cpp:418 +msgid "Total Density (pts/vol):" +msgstr "Densidad total (pts/vol):" + +#: ../src/backend/filters/ionInfo.cpp:448 +msgid "Compositions" +msgstr "Composiciones" + +#: ../src/backend/filters/ionInfo.cpp:449 +msgid "Display compositional data for points in console" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:453 +msgid "Counts" +msgstr "Cuenta" + +#: ../src/backend/filters/ionInfo.cpp:454 +msgid "Display count data for points in console" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:461 +msgid "Ion data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:469 +msgid "Normalise count data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:533 +msgid "Volume" +msgstr "Volumen" + +#: ../src/backend/filters/ionInfo.cpp:536 +msgid "Compute volume for point data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:552 +msgid "Select volume counting technique" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:565 +msgid "Volume data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:64 +msgid "Auto" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:65 +msgid "Little" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:66 +msgid "Big" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:69 +msgid "POS Data" +msgstr "Dato de POS" + +#: ../src/backend/filters/dataLoad.cpp:70 +msgid "Text Data" +msgstr "Dato de texto" + +#: ../src/backend/filters/dataLoad.cpp:71 +msgid "ATO Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:72 +msgid "Tapsim Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:73 +msgid "3Dap/Posap OPS Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:266 +msgid " does not exist" +msgstr " No existe" + +#: ../src/backend/filters/dataLoad.cpp:293 +msgid "Reading File" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:308 +#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:365 +#: ../src/backend/filters/dataLoad.cpp:376 +#: ../src/backend/filters/dataLoad.cpp:436 +#: ../src/backend/filters/dataLoad.cpp:458 +#: ../src/backend/filters/dataLoad.cpp:476 +msgid "Error loading file: " +msgstr "El Error que carga archivo: " + +#: ../src/backend/filters/dataLoad.cpp:338 +msgid "Sampling is active, loaded " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:339 +msgid " available." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:347 +msgid "Loaded entire dataset, " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:347 +#: ../src/backend/filters/dataLoad.cpp:446 +#: ../src/backend/filters/dataLoad.cpp:468 +#: ../src/backend/filters/dataLoad.cpp:486 +msgid " points." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:391 +msgid "" +"Data file contained incorrect number of columns -- should be 3 or 4, was " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:445 +#: ../src/backend/filters/dataLoad.cpp:467 +#: ../src/backend/filters/dataLoad.cpp:485 +msgid "Loaded dataset, " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:517 +msgid "" +"Warning:One or more bounds of the loaded data approaches the limits of " +"numerical stability for the internal data type(magnitude too large). " +"Consider rescaling data before loading" +msgstr "" +"Aviso:Uno o más bounds del dato cargado se acerca los límites de numérico " +"stability para el tipo de dato interno(la magnitud demasiado grande). " +"Considera rescaling dato antes de cargar" + +#: ../src/backend/filters/dataLoad.cpp:541 +#: ../src/backend/filters/dataLoad.cpp:562 +#: ../src/backend/filters/rangeFile.cpp:561 +#: ../src/backend/filters/rangeFile.cpp:581 +msgid "File" +msgstr "Archivo" + +#: ../src/backend/filters/dataLoad.cpp:542 +msgid "File from which to load data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:545 +msgid "" +"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)|*.xml;*.pos;*.txt;*." +"csv;*.ato;*.ops|All Files|*" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:555 +msgid "File type" +msgstr "Tipo de fichero" + +#: ../src/backend/filters/dataLoad.cpp:557 +msgid "Type of file to be loaded" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:572 +msgid "Entries per point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:573 +msgid "Number of decimal values in file per 3D point (normally 4)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:590 +msgid "Relative offset of each entry in file for point's X position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:598 +msgid "Relative offset of each entry in file for point's Y position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:606 +msgid "Relative offset of each entry in file for point's Z position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:614 +msgid "" +"Relative offset of each entry in file to use for scalar value of 3D point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:630 +msgid "File \"Endianness\"" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:631 +msgid "On-disk data storage format. If file won't load, just try each" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:643 +msgid "Recon. Width" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:644 +msgid "" +"Width of box onto which to place reconstructed detector hits (similar to tip " +"radius)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:653 +msgid "Ion Volume" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:654 +msgid "Effective volume of an ion (incl. free packing volume)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:662 +msgid "Det. Efficiency" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:663 +msgid "" +"Effiency of system (ions evaporated towards detector/ions detected by " +"detector)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:677 +msgid "Value Label" +msgstr "Etiqueta de valor" + +#: ../src/backend/filters/dataLoad.cpp:681 +msgid "Name for the scalar value associated with each point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:684 +msgid "Format params." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:690 +msgid "Enabled" +msgstr "Habilitado" + +#: ../src/backend/filters/dataLoad.cpp:694 +msgid "Load this file?" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:705 +msgid "Sample data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:708 +msgid "" +"Perform random selection on file contents, instead of loading entire file" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:715 +msgid "Load Limit (MB)" +msgstr "Límite de carga (MB)" + +#: ../src/backend/filters/dataLoad.cpp:718 +msgid "Limit for size of data to load" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:725 +msgid "Monitor" +msgstr "Monitor" + +#: ../src/backend/filters/dataLoad.cpp:729 +msgid "" +"Watch file timestamp to track changes to file contents from other programs" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:733 +msgid "Load params." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:740 +msgid "Default colour " +msgstr "Default Color " + +#: ../src/backend/filters/dataLoad.cpp:743 +msgid "Default colour for points, if not overridden by other filters" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:748 +msgid "Draw Size" +msgstr "Medida de sorteo" + +#: ../src/backend/filters/dataLoad.cpp:751 +msgid "Default size for points, if not overridden by other filters" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:77 +msgid "Maximum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:78 +msgid "Max in limit" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:171 +msgid "Extrema" +msgstr "Extrema" + +#: ../src/backend/filters/spectrumPlot.cpp:220 +msgid "count" +msgstr "contar" + +#: ../src/backend/filters/spectrumPlot.cpp:305 +msgid "Mixed data" +msgstr "Dato mixto" + +#: ../src/backend/filters/spectrumPlot.cpp:446 +msgid "Background:" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:505 +msgid "Relative " +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:508 +msgid "Probability Density" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:587 +msgid "Step size for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:592 +msgid "Auto Min/max" +msgstr "Coche Min/max" + +#: ../src/backend/filters/spectrumPlot.cpp:596 +msgid "Automatically compute spectrum upper and lower bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:601 +msgid "Min" +msgstr "Mínimo" + +#: ../src/backend/filters/spectrumPlot.cpp:604 +msgid "Starting position for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:609 +msgid "Max" +msgstr "Max" + +#: ../src/backend/filters/spectrumPlot.cpp:612 +msgid "Ending position for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:620 +msgid "Logarithmic" +msgstr "Logarítmica" + +#: ../src/backend/filters/spectrumPlot.cpp:623 +msgid "Convert the plot to logarithmic mode" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:635 +msgid "Normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:638 +msgid "Rescale the plot height, to make inter-spectrum comparisons easier" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:645 +msgid "Lower Bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:649 +msgid "Do not use data below this x-value for normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:653 +msgid "Upper Bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:657 +msgid "Do not use data above this x-value for normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:675 +msgid "Visual style of plot" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:682 +msgid "Colour of plotted spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:697 +msgid "Model" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:700 +msgid "Fitting method to use" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:711 +msgid "Fit Start" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:712 +msgid "Start mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:718 +msgid "Fit End" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:719 +msgid "End mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:732 +msgid "Corr. Only" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:733 +msgid "Only show corrected spectrum, not fit" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:741 +msgid "Background Mode" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:121 +#: ../src/backend/filters/rangeFile.h:96 +msgid "Ranging" +msgstr "Abarcando" + +#: ../src/backend/filters/rangeFile.cpp:564 +msgid "File to use for range data" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:574 +msgid "Drop unranged" +msgstr "Gota unranged" + +#: ../src/backend/filters/rangeFile.cpp:576 +msgid "Remove unranged points when generating output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:586 +msgid "Legend" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:588 +msgid "Display colour legend for enabled ions" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:592 +msgid "View" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:608 +msgid "All Ions" +msgstr "Todos los Iones" + +#: ../src/backend/filters/rangeFile.cpp:609 +msgid "Enable/disable all ions at once" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:617 +msgid "Species" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:624 +msgid "IonID " +msgstr "IonID " + +#: ../src/backend/filters/rangeFile.cpp:625 +msgid "Enable/disable specified ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:635 +msgid "Active Ion " +msgstr "Ión activo " + +#: ../src/backend/filters/rangeFile.cpp:637 +msgid "If true, ion is used in output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:647 +msgid "Colour " +msgstr "Colour" + +#: ../src/backend/filters/rangeFile.cpp:651 +msgid "Colour used to represent ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:674 +msgid "All Ranges" +msgstr "Todas las Gamas" + +#: ../src/backend/filters/rangeFile.cpp:675 +msgid "Enable/disable all ranges" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:690 +msgid "Active Rng " +msgstr "Activo Rng " + +#: ../src/backend/filters/rangeFile.cpp:693 +msgid "" +"Enable/disable specified range (ion must also be enabled to activiate range)" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:697 +msgid "Ion " +msgstr "Ión " + +#: ../src/backend/filters/rangeFile.cpp:700 +msgid "Name of ion associate to this range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:709 +msgid "Start rng " +msgstr "Inicio rng " + +#: ../src/backend/filters/rangeFile.cpp:712 +msgid "Start value for range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:717 +msgid "End rng " +msgstr "Fin rng " + +#: ../src/backend/filters/rangeFile.cpp:720 +msgid "Stopping value for range`" +msgstr "" + +#: ../src/backend/state.cpp:165 +msgid "" +"This file is a \"state\" file for the 3Depict program, and stores " +"information about a particular analysis session. This file should be a valid " +"\"XML\" file" +msgstr "" + +#: ../src/backend/state.cpp:337 +msgid "Failed to allocate parser" +msgstr "Fallado a allocate parser" + +#: ../src/backend/state.cpp:372 +msgid "" +"Unable to retrieve root node in input state file... Is this really a non-" +"empty XML file?" +msgstr "" +"Incapaz de recuperar nodo de raíz en entrada archivo estatal... Es esto " +"realmente un XML no vacío archivo?" + +#: ../src/backend/state.cpp:379 +msgid "Base state node missing. Is this really a state XML file??" +msgstr "" +"Base el nodo estatal que pierde. Es esto realmente un archivo de XML " +"estatal??" + +#: ../src/backend/state.cpp:408 +msgid "State was created by a newer version of this program.. " +msgstr "El Estado fue creado por una versión más nueva de este programa.. " + +#: ../src/backend/state.cpp:409 +msgid "file reading will continue, but may fail." +msgstr "Lectura de archivo continuará, pero puede fallar." + +#: ../src/backend/state.cpp:419 +msgid "" +"Warning, unparseable version number in state file. File reading will " +"continue, but may fail" +msgstr "" +"Aviso, unparseable número de versión en archivo estatal. Lectura de archivo " +"continuará, pero puede fallar" + +#: ../src/backend/state.cpp:428 +msgid "Unable to find the \"writer\" node" +msgstr "" + +#: ../src/backend/state.cpp:438 +msgid "Unable to find the \"backcolour\" node." +msgstr "" + +#: ../src/backend/state.cpp:445 +msgid "\"backcolour\" node missing \"r\" value." +msgstr "" + +#: ../src/backend/state.cpp:450 +msgid "Unable to interpret \"backColour\" node's \"r\" value." +msgstr "" + +#: ../src/backend/state.cpp:458 +msgid "\"backcolour\" node missing \"g\" value." +msgstr "" + +#: ../src/backend/state.cpp:464 +msgid "Unable to interpret \"backColour\" node's \"g\" value." +msgstr "" + +#: ../src/backend/state.cpp:472 +msgid "\"backcolour\" node missing \"b\" value." +msgstr "" + +#: ../src/backend/state.cpp:478 +msgid "Unable to interpret \"backColour\" node's \"b\" value." +msgstr "" + +#: ../src/backend/state.cpp:485 +msgid "\"backcolour\"s rgb values must be in range [0,1]" +msgstr "" + +#: ../src/backend/state.cpp:513 +msgid "Unable to find or interpret \"showaxis\" node" +msgstr "" + +#: ../src/backend/state.cpp:557 +msgid "Unable to locate \"filtertree\" node." +msgstr "" + +#: ../src/backend/state.cpp:573 +msgid "Cameras section missing \"active\" node." +msgstr "" + +#: ../src/backend/state.cpp:581 +msgid "Unable to find property \"value\" for \"cameras->active\" node." +msgstr "" + +#: ../src/backend/state.cpp:587 +msgid "Unable to interpret property \"value\" for \"cameras->active\" node." +msgstr "" + +#: ../src/backend/state.cpp:607 +msgid "Failed to interpret camera state for camera : " +msgstr "" + +#: ../src/backend/state.cpp:615 +msgid "Unable to interpret the camera type for camera : " +msgstr "" + +#: ../src/backend/state.cpp:671 +msgid "Unable to locate stash name for stash " +msgstr "Incapaz de localizar stash nombre para stash " + +#: ../src/backend/state.cpp:678 +msgid "Empty stash name for stash " +msgstr "Vacío stash nombre para stash " + +#: ../src/backend/state.cpp:687 +msgid "No filter tree for stash:" +msgstr "" + +#: ../src/backend/state.cpp:693 +msgid "For stash " +msgstr "Para stash " + +#: ../src/backend/state.cpp:725 +msgid "Unrecognised effect :" +msgstr "Unrecognised Efecto :" + +#: ../src/backend/state.cpp:735 +msgid "Duplicate effect found" +msgstr "El Efecto duplicado encontró" + +#: ../src/backend/state.cpp:735 +msgid " cannot use." +msgstr " No puede utilizar." + +#: ../src/backend/state.cpp:745 +msgid "Error reading effect : " +msgstr "Efecto de lectura del error : " + +#: ../src/backend/state.cpp:965 +msgid "-merge" +msgstr "-Fusionar" + +#: ../src/backend/filtertreeAnalyse.cpp:225 +msgid "" +"Parent filter has no output, but filter requires input -- there is no point " +"in placing a child filter here." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:226 +msgid "Leaf-only filter with child" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:236 +msgid "" +"Parent filters' output will be blocked by child, without use. Parent results " +"will be dropped." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:237 +#: ../src/backend/filtertreeAnalyse.cpp:251 +msgid "Bad parent->child pair" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:250 +msgid "" +"First filter does not output anything useable by child filter. Child filter " +"not useful." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:330 +msgid "Spatial results possibly altered" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:331 +msgid "" +"Filters and settings selected that could alter reported results that depend " +"upon density. Check to see if spatial sampling may be happening in the " +"filter tree - this warning is provisional only." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:399 +msgid "Filter needs parent \"" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:400 +msgid "" +"\" but does not have one. Filter may not function correctly until this " +"parent is given." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:401 +msgid "Filter missing needed parent" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:432 +msgid "Bad range filter settings" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:433 +msgid "" +"Rangefile set to drop unranged data, however a child filter requires it." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:529 +msgid "Filter cannot generate data, but has no input - it is at the tree base." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:530 +msgid "Non data-generating filter at root" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:632 +msgid "Composition results possibly altered" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:633 +msgid "" +"Filters and settings selected that could bias reported composition. Check to " +"see if species biasing may occcur in the filter tree - this warning is " +"provisional only." +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 +#: ../src/backend/APT/APTFileIO.cpp:103 ../src/backend/APT/APTFileIO.cpp:123 +msgid "Error opening file" +msgstr "Error al abrir el archivo" + +#: ../src/backend/APT/APTFileIO.cpp:45 +msgid "Only found header, no data" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:46 +msgid "Unable to reopen file after first scan" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:47 +msgid "Error whilst reading file contents" +msgstr "Error whilst leyendo contenidos de archivo" + +#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 +msgid "Unexpected file format" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:50 +msgid "Insufficient memory to continue" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:54 +msgid "Memory allocation failure on POS load" +msgstr "Fracaso de asignación de la memoria en carga de POS" + +#: ../src/backend/APT/APTFileIO.cpp:55 +msgid "Error opening pos file" +msgstr "El Error que abre pos archivo" + +#: ../src/backend/APT/APTFileIO.cpp:56 +msgid "Pos file empty" +msgstr "Pos Archiva vacío" + +#: ../src/backend/APT/APTFileIO.cpp:57 +msgid "Pos file size appears to have non-integer number of entries" +msgstr "Pos Medida de archivo aparece para tener no-integer número de entradas" + +#: ../src/backend/APT/APTFileIO.cpp:58 +msgid "Error reading from pos file (after open)" +msgstr "Lectura de error de pos archivo (después de abierto)" + +#: ../src/backend/APT/APTFileIO.cpp:59 +msgid "Error - Found NaN in pos file" +msgstr "Error - Encontrado NaN en pos archivo" + +#: ../src/backend/APT/APTFileIO.cpp:60 +msgid "Error - Found Inf in pos file" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:61 +msgid "Pos load aborted by interrupt." +msgstr "Pos Carga abortado por interrumpir." + +#: ../src/backend/APT/APTFileIO.cpp:80 +msgid "No numerical data found" +msgstr "No el dato numérico encontró" + +#: ../src/backend/APT/APTFileIO.cpp:81 +msgid "Error re-opening file, after first scan" +msgstr "Error re-abriendo archivo, después de que primer escáner" + +#: ../src/backend/APT/APTFileIO.cpp:82 +msgid "Unable to read file contents after open" +msgstr "Incapaz de leer contenidos de archivo después de abierto" + +#: ../src/backend/APT/APTFileIO.cpp:83 +msgid "Error interpreting field in file" +msgstr "El Error que interpreta campo en archivo" + +#: ../src/backend/APT/APTFileIO.cpp:84 +msgid "Incorrect number of fields in file" +msgstr "Incorrect Número de campos en archivo" + +#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 +msgid "Unable to allocate memory to store data" +msgstr "Incapaz a allocate memoria para almacenar dato" + +#: ../src/backend/APT/APTFileIO.cpp:104 +msgid "File is empty" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:105 +msgid "Filesize does not match expected format" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:106 +msgid "File version number not <4, as expected" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:108 +msgid "Unable to detect endian-ness in file" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:122 +msgid "Error interpreting file contents" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:124 +msgid "Aborted opening file" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:48 +msgid "Error opening file, check name and permissions." +msgstr "Archivo de apertura del error, nombre de control y permisos." + +#: ../src/backend/APT/APTRanges.cpp:49 +msgid "" +"Error interpreting range file header, expecting ion count and range count, " +"respectively." +msgstr "" +"El Error que interpreta archivo de gama header, esperando el ión cuenta y la " +"gama cuenta, respectivamente." + +#: ../src/backend/APT/APTRanges.cpp:50 +msgid "" +"Range file appears to be empty, check file is a proper range file and is not " +"empty." +msgstr "" +"Archivo de gama aparece para ser vacío, archivo de control es un archivo de " +"gama propio y no es vacío." + +#: ../src/backend/APT/APTRanges.cpp:51 +msgid "Error reading the long name for ion." +msgstr "El Error que lee el nombre largo para ión." + +#: ../src/backend/APT/APTRanges.cpp:52 +msgid "Error reading the short name for ion." +msgstr "El Error que lee el nombre corto para ión." + +#: ../src/backend/APT/APTRanges.cpp:53 +msgid "" +"Error reading colour data in the file, expecting 3 decimal values, space " +"separated." +msgstr "" +"Dato de color de lectura de error en el archivo, esperando 3 valores " +"decimales, el espacio separó." + +#: ../src/backend/APT/APTRanges.cpp:54 +msgid "" +"Tried skipping to table separator line (line with dashes), but did not find " +"it." +msgstr "" +"Probado skipping a mesa separator línea (línea con dashes), pero no lo " +"encontró." + +#: ../src/backend/APT/APTRanges.cpp:55 +msgid "" +"Number of ions in the table header did not match the number specified at the " +"start of the file" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:56 +msgid "" +"Unexpected failure whilst trying to skip over range lead-in data (bit before " +"range start value)" +msgstr "" +"Fracaso inesperado whilst probando a skip sobre ventaja de gama-en dato (bit " +"antes de valor de inicio de la gama)" + +#: ../src/backend/APT/APTRanges.cpp:57 +msgid "" +"Range table had an incorrect number of entries, should be 2 or 3 + number of " +"ranges" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:58 +msgid "Unable to read range start and end values" +msgstr "Incapaz de leer inicio de gama y valores de fin" + +#: ../src/backend/APT/APTRanges.cpp:59 +msgid "Unable to read range table entry" +msgstr "Incapaz de leer entrada de mesa de la gama" + +#: ../src/backend/APT/APTRanges.cpp:60 +msgid "" +"Error reading file, unexpected format, are you sure it is a proper range " +"file?" +msgstr "" +"Archivo de lectura del error, formato inesperado, te es seguro es un archivo " +"de gama propio?" + +#: ../src/backend/APT/APTRanges.cpp:61 +msgid "" +"Too many ranges appeared to have range entries with no usable data (eg, all " +"blank)" +msgstr "" +"Demasiadas gamas aparecidas para tener entradas de gama con ningún usable " +"dato (eg, todo espacio)" + +#: ../src/backend/APT/APTRanges.cpp:62 +msgid "" +"Range file appears to contain malformed data, check things like start and " +"ends of m/c are not equal or flipped." +msgstr "" +"Archivo de gama aparece para contener malformed dato, cosas de control como " +"inicio y fines de m/c no es igual o flipped." + +#: ../src/backend/APT/APTRanges.cpp:63 +msgid "Range file appears to be inconsistent (eg, overlapping ranges)" +msgstr "Archivo de gama aparece para ser inconsistent (eg, overlapping gamas)" + +#: ../src/backend/APT/APTRanges.cpp:64 +msgid "No ion name mapping found for multiple ion." +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:65 +msgid "Polyatomic extension range matches multiple masses in first section" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:66 +msgid "Range file is exceedingly large. Refusing to open" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:1404 +msgid "" +"Range headings do not match order of the ions listed in the name " +"specifications. The name specification ordering will be used when reading " +"the range table, as the range heading section is declared as a comment in " +"the file-format specifications, and is not to be intepreted by this program. " +"Check range-species associations actually match what you expect." +msgstr "" + +#: ../src/backend/filter.cpp:54 +msgid "2D Plot" +msgstr "" + +#: ../src/backend/filter.cpp:56 +msgid "Range" +msgstr "Rango" + +#: ../src/backend/filter.cpp:57 +msgid "Voxel" +msgstr "Voxel" + +#: ../src/backend/filters/transform.h:71 +msgid "Ion. Transform" +msgstr "Ión. Transforma" + +#: ../src/backend/filters/ionColour.h:66 +msgid "Spectral Colour" +msgstr "" + +#: ../src/backend/filters/boundingBox.h:76 +msgid "Bound box" +msgstr "Caja ligada" + +#: ../src/backend/filters/ionDownsample.h:79 +msgid "Ion Sampler" +msgstr "Ión Sampler" + +#: ../src/backend/filters/profile.h:123 +msgid "Comp. Prof." +msgstr "Comp. Prof." + +#: ../src/backend/filters/ionInfo.h:103 +msgid "Ion info" +msgstr "Ión info" + +#: ../src/backend/filters/dataLoad.h:145 +msgid "Pos Data" +msgstr "Pos Dato" + +#: ../src/backend/filters/externalProgram.h:69 +msgid "Ext. Program" +msgstr "Ext. Programa" + +#: ../data/startup-tips.txt:5 +msgid "" +"You can reset the main view by tapping the space bar. Hold down modifier " +"keys like shift,ctrl to change the axis. Double tap to switch which axis to " +"look the other way (+ve or -ve direction)" +msgstr "" + +#: ../data/startup-tips.txt:6 +msgid "" +"You can delete filters from the tree by selecting them, then tapping delete?" +msgstr "" + +#: ../data/startup-tips.txt:7 +msgid "" +"Multiple languages are supported? You can translate the program into your " +"own language at https://www.transifex.com/projects/p/3depict/" +msgstr "" + +#: ../data/startup-tips.txt:8 +msgid "" +"Package files can be easily shared to allow others to view your analysis, " +"using the File->Export->Package menu item. This will automatically import " +"all referenced files (eg pos/rng files) into a single shareable folder" +msgstr "" + +#: ../data/startup-tips.txt:9 +msgid "" +"You can export plots to SVG \"Vector\" format, for easier editing - edit " +"your plots in inkscape!" +msgstr "" + +#: ../data/startup-tips.txt:10 +msgid "You can access the manual from the Help menu" +msgstr "" + +#: ../data/startup-tips.txt:11 +msgid "You can change filter defaults using the Edit->Preferences menu item" +msgstr "" + +#: ../data/startup-tips.txt:12 +msgid "" +"You can overlay multiple plots at once, by selecting more than on plot at a " +"time (e.g. using Ctrl)" +msgstr "" + +#: ../data/startup-tips.txt:13 +msgid "" +"Calculations are much faster (more than linear speedup) when working with " +"smaller datasets - try sampling, or clipping out a small region to work " +"faster, then remove the sampling when you are ready" +msgstr "" + +#: ../data/startup-tips.txt:14 +msgid "" +"You can abort most calculations either by pressing Escape (OSX/Linux), or by " +"using the Abort button (Windows)" +msgstr "" + +#: ../data/startup-tips.txt:15 +msgid "" +"That anyone can contribute to improving this program, even without knowing " +"about computer programming? Reporting bugs helps us to prioritise our work, " +"and directs us to fix real problems for all users" +msgstr "" + +#: ../data/startup-tips.txt:16 +msgid "" +"You can load more than one file at a time, then either operate on them " +"separately, or together" +msgstr "" + +#: ../data/startup-tips.txt:17 +msgid "" +"You can have more than one range file for different parts of your dataset" +msgstr "" + +#: ../data/startup-tips.txt:18 +msgid "" +"Cameras can be saved and retrieved whenever you like, using the camera tab" +msgstr "" + +#: ../data/startup-tips.txt:19 +msgid "" +"Subsections of the filter tree can be saved to the \"Stashed filters\" drop-" +"down" +msgstr "" + +#: ../data/startup-tips.txt:20 +msgid "" +"The console tab along the bottom often shows useful messages from filters. " +"When new messages appear, a small symbol is shown on the tab" +msgstr "" + +#: ../data/startup-tips.txt:21 +msgid "" +"The raw data used for any plot can be accessed from the \"Raw\" tab on the " +"bottom panel" +msgstr "" + +#: ../data/startup-tips.txt:22 +msgid "" +"You can ask questions about the program, or using it on your data on our " +"forums (https://sourceforge.net/p/threedepict/discussion/general/)" +msgstr "" + +#: ../data/startup-tips.txt:23 +msgid "" +"By creating a camera, you can switch between orthographic (parallel) and " +"perspective views" +msgstr "" + +#: ../data/startup-tips.txt:24 +msgid "" +"You can open multiple files at once, and get a side-by-side view by " +"translating (shifting) one of the datasets to one side" +msgstr "" + +#: ../data/startup-tips.txt:25 +msgid "" +"From version 0.0.20, vector values in filter properties (e.g. \"(1,0,0)\") " +"can be specified using ISO 31-11 spherical coordinates using the following " +"notation , with angles in degrees" +msgstr "" + +#: ../data/startup-tips.txt:26 +msgid "" +"You can change the behavior of filter dragging by holding Ctrl (mac: cmd) or " +"Shift whilst dragging? This switches between move, copy and \"splice" +msgstr "" + +#: ../data/startup-tips.txt:27 +msgid "" +"We like to know where we are being helpful? Please consider writing the " +"program and version number in any work you might publish - whether in print " +"or online. Alternatively, link to our website, or write to us to let us know " +"we helped!" +msgstr "" + +#: ../data/startup-tips.txt:28 +msgid "" +"You can merge files by placing two \"Pos Data\" filters in series, then " +"saving the result?" +msgstr "" + +#~ msgid "ORNL format RNG (*.rng)|*.rng|All Files (*)|*" +#~ msgstr "formato de ORNL RNG (*.rng)|*.rng|Todos los Archivos (*)|*" + +#~ msgid "POS Data (*.pos)|*.pos|All Files (*)|*" +#~ msgstr "Dato de POS (*.pos)|*.pos|Todos los Archivos (*)|*" + +#~ msgid "Moving - Hold ⌘ (command) to copy" +#~ msgstr "Moviendo - Control ⌘ (orden) para copiar" + +#~ msgid "Moving - Hold control to copy" +#~ msgstr "Moviendo - control de Control para copiar" + +#~ msgid "\\% Done (Esc aborts)" +#~ msgstr "\\% Hecho (Esc aborta)" + +#~ msgid "\\% Done" +#~ msgstr "\\% Hecho" + +#~ msgid "Mass-to-Charge (amu/e)" +#~ msgstr "Masa-a-Cargo (amu/e)" + +#~ msgid "Pre-Allocate" +#~ msgstr "Pre-Allocate" Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/translations/3depict_fr_FR.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/translations/3depict_fr_FR.mo differ Binary files /tmp/tmpdIWLFJ/2neP2pNUkP/3depict-0.0.19-1/translations/3Depict_fr_FR.mo and /tmp/tmpdIWLFJ/qFkKBLtubC/3depict-0.0.20/translations/3Depict_fr_FR.mo differ diff -Nru 3depict-0.0.19-1/translations/3Depict_fr_FR.po 3depict-0.0.20/translations/3Depict_fr_FR.po --- 3depict-0.0.19-1/translations/3Depict_fr_FR.po 1970-01-01 00:00:00.000000000 +0000 +++ 3depict-0.0.20/translations/3Depict_fr_FR.po 2017-02-04 23:52:37.000000000 +0000 @@ -0,0 +1,5712 @@ +# Translation file for locale fr_FR +# Copyright (C) 2017 +# This file is distributed under the same license as the 3Depict package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: 3Depict\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-04 23:42+0000\n" +"PO-Revision-Date: 2016-01-03 21:27+0000\n" +"Last-Translator: \n" +"Language-Team: French (http://www.transifex.com/mycae/3depict/language/fr/)\n" +"Language: fr\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" + +#: ../src/gl/cameras.cpp:596 +msgid "Lock" +msgstr "Verrouiller" + +#: ../src/gl/cameras.cpp:603 ../src/backend/filters/ionClip.cpp:529 +#: ../src/backend/filters/ionClip.cpp:551 +#: ../src/backend/filters/ionClip.cpp:573 +#: ../src/backend/filters/ionClip.cpp:610 +#: ../src/backend/filters/profile.cpp:1017 +#: ../src/backend/filters/profile.cpp:1055 +#: ../src/backend/filters/transform.cpp:1232 +#: ../src/backend/filters/transform.cpp:1259 +#: ../src/backend/filters/transform.cpp:1285 +#: ../src/backend/filters/annotation.cpp:576 +msgid "Origin" +msgstr "Origine" + +#: ../src/gl/cameras.cpp:611 ../src/backend/filters/spatialAnalysis.cpp:872 +msgid "Target" +msgstr "Cible" + +#: ../src/gl/cameras.cpp:617 +msgid "Up Dir." +msgstr "Chef amunt de Dire." + +#: ../src/gl/cameras.cpp:625 ../src/gl/cameras.cpp:728 +msgid "Perspective" +msgstr "Perspective" + +#: ../src/gl/cameras.cpp:627 ../src/gl/cameras.cpp:730 +#: ../src/gui/mainFrame.cpp:5416 +msgid "Orthogonal" +msgstr "Othogonal" + +#: ../src/gl/cameras.cpp:631 +msgid "Projection" +msgstr "Projection" + +#: ../src/gl/cameras.cpp:640 +msgid "Field of View (deg)" +msgstr "Champ de Vue (deg). " + +#: ../src/gl/cameras.cpp:646 +msgid "View size" +msgstr "Mida de vue. " + +#: ../src/wx/wxcomponents.cpp:191 +msgid "Save Data..." +msgstr "Sauve Donnée..." + +#: ../src/wx/wxcomponents.cpp:192 +msgid "Text File (*.txt)|*.txt|All Files (*)|*" +msgstr "Archives de texte (*.txt)|*.txt|Toutes les Archives (*)|*. " + +#: ../src/wx/wxcomponents.cpp:204 +msgid "Error saving file. Check output dir is writable." +msgstr "Archives d'estalvi de l'erreur. Sortie de contrôle dire est writable." + +#: ../src/wx/wxcomponents.cpp:204 ../src/gui/dialogs/ExportRngDialog.cpp:187 +#: ../src/gui/mainFrame.cpp:1478 ../src/gui/mainFrame.cpp:1603 +#: ../src/gui/mainFrame.cpp:1652 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2284 ../src/gui/mainFrame.cpp:2357 +#: ../src/gui/mainFrame.cpp:2460 ../src/gui/mainFrame.cpp:2573 +msgid "Save error" +msgstr "Erreur d'enregistrement" + +#: ../src/common/basics.cpp:183 +msgid "in the future?" +msgstr "En le futur?. " + +#: ../src/common/basics.cpp:234 +msgid "a decade ago" +msgstr "Fait une décade. " + +#: ../src/common/basics.cpp:235 +msgid "a year ago" +msgstr "Fait une année. " + +#: ../src/common/basics.cpp:236 +msgid "a month ago" +msgstr "Fait un mois. " + +#: ../src/common/basics.cpp:237 +msgid "a week ago" +msgstr "Fait une semaine. " + +#: ../src/common/basics.cpp:238 +msgid "a day ago" +msgstr "Fait un jour. " + +#: ../src/common/basics.cpp:239 +msgid "an hour ago" +msgstr "il y a une heure" + +#: ../src/common/basics.cpp:240 +msgid "45 minutes ago" +msgstr "Fait 45 minutes. " + +#: ../src/common/basics.cpp:241 +msgid "30 minutes ago" +msgstr "Fait 30 minutes. " + +#: ../src/common/basics.cpp:242 +msgid "20 minutes ago" +msgstr "Fait 20 minutes. " + +#: ../src/common/basics.cpp:243 +msgid "15 minutes ago" +msgstr "Fait 15 minutes. " + +#: ../src/common/basics.cpp:244 +msgid "10 minutes ago" +msgstr "Fait 10 minutes. " + +#: ../src/common/basics.cpp:245 +msgid "5 minutes ago" +msgstr "Fait 5 minutes. " + +#: ../src/common/basics.cpp:246 +msgid "a minute ago" +msgstr "il y a une minute" + +#: ../src/common/basics.cpp:247 +msgid "30 seconds ago" +msgstr "Fait 30 secondes. " + +#: ../src/common/basics.cpp:248 +msgid "10 seconds ago" +msgstr "Fait 10 secondes. " + +#: ../src/common/basics.cpp:249 +msgid "a second ago" +msgstr "Une seconde fait. " + +#: ../src/common/basics.cpp:254 +msgid "a few decades ago" +msgstr "Fait des combien décades. " + +#: ../src/common/basics.cpp:255 +msgid "a few years ago" +msgstr "Fait des combien années. " + +#: ../src/common/basics.cpp:256 +msgid "a few months ago" +msgstr "Fait des combien mois. " + +#: ../src/common/basics.cpp:257 +msgid "a few weeks ago" +msgstr "Fait des combien semaines. " + +#: ../src/common/basics.cpp:258 +msgid "a few days ago" +msgstr "Fait des combien jours. " + +#: ../src/common/basics.cpp:259 +msgid "a few hours ago" +msgstr "Fait des combien heures. " + +#: ../src/common/basics.cpp:262 +msgid "tens of minutes ago" +msgstr "" + +#: ../src/common/basics.cpp:266 +msgid "a few minutes ago" +msgstr "Fait des combien minutes. " + +#: ../src/common/basics.cpp:269 +msgid "a few seconds ago" +msgstr "il y a quelques secondes" + +#: ../src/common/basics.cpp:296 +msgid "moments ago" +msgstr "Fait des moments. " + +#: ../src/common/colourmap.cpp:307 +msgid "Jet" +msgstr "Jet" + +#: ../src/common/colourmap.cpp:308 +msgid "Hot" +msgstr "Chaud" + +#: ../src/common/colourmap.cpp:309 +msgid "Cold" +msgstr "Froid" + +#: ../src/common/colourmap.cpp:310 +msgid "Grey" +msgstr "Gris" + +#: ../src/common/colourmap.cpp:311 +msgid "Cyclic" +msgstr "Cyclique" + +#: ../src/common/colourmap.cpp:312 +msgid "General" +msgstr "Général" + +#: ../src/common/colourmap.cpp:313 +msgid "Blue" +msgstr "Bleu" + +#: ../src/common/colourmap.cpp:314 +msgid "Pseudo-Random" +msgstr "Pseudo-Aleatori. " + +#: ../src/common/colourmap.cpp:315 +msgid "Inferno" +msgstr "" + +#: ../src/common/colourmap.cpp:316 +msgid "Viridis" +msgstr "" + +#: ../src/common/constants.cpp:22 +msgid "" +"Range Files (*.rng; *.env; *.rrng)|*.rng;*.env;*.rrng;*.RRNG;*.RNG;*.ENV|RNG " +"File (*.rng)|*.rng;*.RNG|Environment File (*.env)|*.env;*.ENV|RRNG Files (*." +"rrng)|*.rrng;*.RRNG|All Files (*)|*" +msgstr "" + +#: ../src/gui/glPane.cpp:642 +msgid "Use shift/ctrl-space or double tap to alter reset axis" +msgstr "" +"Changement d'usage/ctrl-aixeta espacial ou double pour altérer axe de " +"reinicialització. " + +#: ../src/gui/glPane.cpp:938 +msgid "Image progress" +msgstr "Progrès d'image. " + +#: ../src/gui/glPane.cpp:939 +msgid "Rendering tiles..." +msgstr "Rendering Dalle..." + +#: ../src/gui/glPane.cpp:1132 +msgid "Animation progress" +msgstr "Progrès d'animation. " + +#: ../src/gui/glPane.cpp:1133 +msgid "Rendering sequence..." +msgstr "Rendering Seqüència..." + +#: ../src/gui/glPane.cpp:1171 +msgid "Saving Image " +msgstr "Image d'estalvi. " + +#: ../src/gui/glPane.cpp:1171 ../src/gui/mainFrame.cpp:4504 +#: ../src/gui/mainFrame.cpp:4508 ../src/gui/mainFrame.cpp:4521 +#: ../src/backend/filters/dataLoad.cpp:339 +msgid " of " +msgstr "sur" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:40 +msgid "Range Sources" +msgstr "Sources de gamme. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:42 +msgid "Details" +msgstr "Détails" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:53 +msgid "Source Filter" +msgstr "Filtre source" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:54 +#: ../src/backend/filters/rangeFile.cpp:657 +msgid "Ions" +msgstr "Ions. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:55 +#: ../src/gui/dialogs/rangeEditDialog.cpp:1587 +#: ../src/backend/filters/voxelise.cpp:1049 +#: ../src/backend/filters/rangeFile.cpp:724 +msgid "Ranges" +msgstr "Intervalles" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:88 +msgid "Param" +msgstr "Arrêtons. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:89 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:105 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:352 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1199 +#: ../src/backend/filters/dataLoad.cpp:610 +msgid "Value" +msgstr "Valeur" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:90 +msgid "Value2" +msgstr "Valeur2. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:97 +msgid "Ion Name" +msgstr "Nom d'ió. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:98 +msgid "Num Ranges" +msgstr "Num Gammes. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:116 +#: ../src/gui/dialogs/rangeEditDialog.cpp:696 ../src/backend/filter.cpp:52 +msgid "Ion" +msgstr "Ion" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:117 +msgid "Range Start" +msgstr "Début de gamme. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:118 +msgid "Range end" +msgstr "Fin de période" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:151 ../src/gui/mainFrame.cpp:2395 +msgid "Save pos..." +msgstr "Sauve pos..." + +#: ../src/gui/dialogs/ExportRngDialog.cpp:152 +msgid "" +"Cameca/Ametek RRNG (*.rrng)|*.rrng|ORNL format RNG (*.rng)|*.rng|Cameca ENV " +"(*.env)|*.env|All Files (*)|*" +msgstr "" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:184 ../src/gui/mainFrame.cpp:1478 +#: ../src/gui/mainFrame.cpp:1653 ../src/gui/mainFrame.cpp:1728 +#: ../src/gui/mainFrame.cpp:2285 ../src/gui/mainFrame.cpp:2461 +#: ../src/gui/mainFrame.cpp:2574 +msgid "Unable to save. Check output destination can be written to." +msgstr "" +"Impossible d'enregistrer. Vérifiez la destination de sortie peut être écrit." + +#: ../src/gui/dialogs/ExportRngDialog.cpp:253 +msgid "Export Range" +msgstr "Exporter la plage" + +#: ../src/gui/dialogs/ExportRngDialog.cpp:258 +msgid "List of rangefiles in filter tree" +msgstr "Liste de rangefiles en arbre de filtre. " + +#: ../src/gui/dialogs/ExportRngDialog.cpp:260 +msgid "Detailed view of selected range" +msgstr "Vue detallada de gamme sélectionnée. " + +#: ../src/gui/dialogs/rangeEditDialog.cpp:221 +msgid "Show Overlays" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:246 +msgid "e.g. H2O" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:561 +#: ../src/gui/dialogs/rangeEditDialog.cpp:695 ../src/gui/mainFrame.cpp:6071 +#: ../src/backend/filter.cpp:53 +msgid "Plot" +msgstr "Courbe" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:562 +msgid "Short Name" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:563 +msgid "Long Name" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:564 +#: ../src/backend/filters/voxelise.cpp:1188 +#: ../src/backend/filters/profile.cpp:1159 +#: ../src/backend/filters/annotation.cpp:909 +#: ../src/backend/filters/spectrumPlot.cpp:679 +msgid "Colour" +msgstr "Couleurs" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:697 +#: ../src/backend/filters/annotation.cpp:613 +#: ../src/backend/filters/annotation.cpp:654 +#: ../src/backend/filters/annotation.cpp:823 +msgid "Start" +msgstr "Début" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:698 +#: ../src/backend/filters/annotation.cpp:621 +#: ../src/backend/filters/annotation.cpp:663 +#: ../src/backend/filters/annotation.cpp:831 +msgid "End" +msgstr "Fin" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1260 +msgid "Range or ion?" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1261 +msgid "Select type to add" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1542 +msgid "Range Editor" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1546 +msgid "Enable or disable all overlays" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1547 +msgid "Entered overlays, use delete to remove" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1548 +msgid "Available plots for ranging" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1549 +msgid "Enter species to display as overlay, e.g. SiO2" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1550 +msgid "Editable ranges" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1551 +msgid "Editable ions" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1586 +#: ../src/gui/dialogs/animateFilterDialog.cpp:177 +msgid "Plots" +msgstr "" + +#: ../src/gui/dialogs/rangeEditDialog.cpp:1588 +msgid "Overlay" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:39 +msgid "Remove &All" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:123 +msgid "Restore state?" +msgstr "" + +#: ../src/gui/dialogs/autosaveDialog.cpp:133 +msgid "Multiple autosave states were found; would you like to restore one?" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:37 ../src/backend/filter.cpp:481 +#: ../src/backend/filter.cpp:484 +msgid "Error" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:39 +msgid "Warning" +msgstr "" + +#: ../src/gui/dialogs/filterErrorDialog.cpp:42 +#: ../src/gui/dialogs/filterErrorDialog.cpp:52 +msgid "Filter Errors" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:49 +msgid "Stashes" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:52 +msgid "Stashed Tree" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:54 +msgid "Properties" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:60 +msgid "Stash Name" +msgstr "Stash Nom. " + +#: ../src/gui/dialogs/StashDialog.cpp:61 +msgid "Filter Count" +msgstr "Le Filtre Compte. " + +#: ../src/gui/dialogs/StashDialog.cpp:94 +msgid "Stashed Trees" +msgstr "Stashed Arbres. " + +#: ../src/gui/dialogs/StashDialog.cpp:97 +msgid "Erase stashed item" +msgstr "Stashed Filtres. " + +#: ../src/gui/dialogs/StashDialog.cpp:98 +msgid "Filter view for current stash" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:99 +msgid "Settings for selected filter in current stash" +msgstr "" + +#: ../src/gui/dialogs/StashDialog.cpp:100 +msgid "Available stashes" +msgstr "Donnée disponible. " + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:45 +msgid "Start Frame: " +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:47 +msgid "From File" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:50 +msgid "From Table" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:104 +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:350 +#: ../src/gui/dialogs/animateFilterDialog.cpp:197 +msgid "Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:240 +msgid "Select text file..." +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:241 +msgid "Text files (*.txt)|*.txt;|All Files (*)|*" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:342 +msgid "String Keyframes" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:344 +msgid "Frame at which to start string sequence" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:345 +msgid "Frame offset for data start" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:346 +msgid "File to use as string data source, one value per row" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:347 +msgid "Select file to use as data source" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:348 +msgid "Use table below for data source" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:354 +msgid "Add new data rows to table, hold shift/cmd to insert multiple rows" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:355 +msgid "Remove selected strings from table" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:356 +msgid "Abort value selection and return to previous window" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp:357 +msgid "Accept data values" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:60 +msgid "Keyframe Data" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:61 +msgid "Transition" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:64 +msgid "Step" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:65 +msgid "Ramp" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:68 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1181 +msgid "Start Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:70 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1182 +msgid "End Frame" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:73 +msgid "Initial Value" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:74 +msgid "startColour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:75 +msgid "Final Value" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:76 +msgid "endColour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:250 +msgid "Key Frame : Colour" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:252 +msgid "Colour at the start of the transtition" +msgstr "" + +#: ../src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp:253 +msgid "Colour at end of transition" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:92 +msgid "Cameca/Ametek RRNG" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:93 +msgid "Oak-Ridge RNG" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:94 +msgid "Cameca/Ametek ENV" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:156 +msgid "Key frames" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:157 +msgid "Output Data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:158 +msgid "Filters and properties" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:164 +msgid "Dir : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:167 +msgid "Output only when refresh required" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:169 +msgid "Data Types:" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:170 +msgid "3D Images" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:171 +msgid "File Prefix: " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:173 +msgid "Size : " +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:175 +msgid "..." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:176 +msgid "Point data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:178 +msgid "Voxel data" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:179 +msgid "Range files" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:180 +msgid "Format" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 +msgid "transition frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:701 ../src/gui/mainFrame.cpp:1705 +msgid "Frame count" +msgstr "Numéro de l'image" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:773 +msgid "Key frame : Colour" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:826 +msgid "File existed, but was unable to read or interpret file contents." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:827 +msgid "String load failed" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:848 +msgid "Keyframe : decimal" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:857 +msgid "Keyframe : integer" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:866 +msgid "Keyframe : 3D Point" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:994 +msgid "Select or create new folder" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1174 +msgid "Export Animation" +msgstr "Animation d'exportation. " + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1175 +msgid "Select filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1176 +msgid "Select property" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1178 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1197 +msgid "Filter" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1179 +#: ../src/gui/dialogs/animateFilterDialog.cpp:1198 +msgid "Property" +msgstr "Propriété" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1180 +#: ../src/backend/filters/spatialAnalysis.cpp:1062 +#: ../src/backend/filters/transform.cpp:1149 +#: ../src/backend/filters/annotation.cpp:553 +#: ../src/backend/filters/annotation.cpp:559 +#: ../src/backend/filters/ionDownsample.cpp:466 +msgid "Mode" +msgstr "Mode" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1183 +msgid "Keyframe table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1184 +msgid "Remove the selected keyframe from the table" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1185 +msgid "Enter where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1186 +msgid "Browse to directory where the animation frames will be exported to" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1188 +msgid "" +"Title for files, result will be saved as #-name.png, where # is image number." +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1189 +msgid "Target resolution (image size)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1190 +msgid "Select frame for property display" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1191 +msgid "Enter frame number to change frame (eg 1/20)" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1192 +msgid "Save point data (POS files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1193 +msgid "Save plots (as text files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1194 +msgid "Save voxel data (raw files) in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1195 +msgid "Save range files in output folder?" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1200 +msgid "Animation parameters for current frame" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1201 +msgid "Abort animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1202 +msgid "Run Animation" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1273 +msgid "Filter view" +msgstr "" + +#: ../src/gui/dialogs/animateFilterDialog.cpp:1274 +msgid "Frame view" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:45 +msgid "Width :" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:47 +msgid "Height :" +msgstr "" + +#: ../src/gui/dialogs/resolutionDialog.cpp:50 +#: ../src/gui/dialogs/prefDialog.cpp:85 +msgid "Reset" +msgstr "Réinitialiser" + +#: ../src/gui/dialogs/resolutionDialog.cpp:336 +msgid "Resolution Selection" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:63 +msgid "Export:" +msgstr "Exporter :" + +#: ../src/gui/dialogs/ExportPos.cpp:64 +#: ../src/backend/filters/boundingBox.cpp:568 +msgid "Visible" +msgstr "Visible" + +#: ../src/gui/dialogs/ExportPos.cpp:65 +msgid "Selected Data" +msgstr "Donnée sélectionnée. " + +#: ../src/gui/dialogs/ExportPos.cpp:67 +msgid "Available Data" +msgstr "Donnée disponible. " + +#: ../src/gui/dialogs/ExportPos.cpp:73 +msgid "Selection" +msgstr "Sélection" + +#: ../src/gui/dialogs/ExportPos.cpp:98 ../src/gui/dialogs/ExportPos.cpp:101 +msgid "Index" +msgstr "Index" + +#: ../src/gui/dialogs/ExportPos.cpp:99 ../src/gui/dialogs/ExportPos.cpp:102 +#: ../src/backend/filters/spatialAnalysis.cpp:2388 +#: ../src/backend/filters/spatialAnalysis.cpp:2481 +#: ../src/backend/filters/spatialAnalysis.cpp:2541 +#: ../src/backend/filters/spatialAnalysis.cpp:3292 +#: ../src/backend/filters/spatialAnalysis.cpp:3481 +#: ../src/backend/filters/profile.cpp:608 +#: ../src/backend/filters/spectrumPlot.cpp:65 +msgid "Count" +msgstr "Décompte" + +#: ../src/gui/dialogs/ExportPos.cpp:451 +msgid "Export Pos Data" +msgstr "Exportation Pos Donnée. " + +#: ../src/gui/dialogs/ExportPos.cpp:454 +msgid "Tree of filters, select leaves to show ion data." +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:456 +msgid "Add all data from all filters" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:457 +msgid "Add all data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/ExportPos.cpp:458 +msgid "Add selected data from currently selected filter" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:73 +msgid "Panel Display" +msgstr "Affichage du tableau de bord" + +#: ../src/gui/dialogs/prefDialog.cpp:75 +msgid "Online Updates" +msgstr "En ligne Actualitza. " + +#: ../src/gui/dialogs/prefDialog.cpp:77 ../src/gui/dialogs/prefDialog.cpp:560 +msgid "Startup" +msgstr "Démarrage" + +#: ../src/gui/dialogs/prefDialog.cpp:78 +msgid "Camera Speed" +msgstr "Vitesse de càmera. " + +#: ../src/gui/dialogs/prefDialog.cpp:79 +msgid "Available Filters" +msgstr "Filtres disponibles" + +#: ../src/gui/dialogs/prefDialog.cpp:84 +msgid "Reset All" +msgstr "Tout réinitialiser" + +#: ../src/gui/dialogs/prefDialog.cpp:87 +msgid "Show all panels" +msgstr "Spectacle tous les plafons. " + +#: ../src/gui/dialogs/prefDialog.cpp:88 +msgid "Remember last" +msgstr "Souvient dernier. " + +#: ../src/gui/dialogs/prefDialog.cpp:89 +msgid "Show Selected" +msgstr "Le Spectacle a Sélectionné. " + +#: ../src/gui/dialogs/prefDialog.cpp:92 +msgid "Control Pane" +msgstr "Contrôle Pane. " + +#: ../src/gui/dialogs/prefDialog.cpp:93 +msgid "Raw Data Panel" +msgstr "Plafó de Donnée crue. " + +#: ../src/gui/dialogs/prefDialog.cpp:94 ../src/gui/mainFrame.cpp:693 +msgid "Plot List" +msgstr "Liste de trama. " + +#: ../src/gui/dialogs/prefDialog.cpp:96 +msgid "Periodically notify about available updates" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:98 +msgid "Prefer orthographic at startup" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:99 +msgid "Move Rate" +msgstr "índex de mouvement. " + +#: ../src/gui/dialogs/prefDialog.cpp:100 ../src/gui/dialogs/prefDialog.cpp:104 +msgid "(slow)" +msgstr "(Lent). " + +#: ../src/gui/dialogs/prefDialog.cpp:102 ../src/gui/dialogs/prefDialog.cpp:106 +msgid "(fast)" +msgstr "(Rapide). " + +#: ../src/gui/dialogs/prefDialog.cpp:103 +msgid "Zoom Rate" +msgstr "índex de zoom. " + +#: ../src/gui/dialogs/prefDialog.cpp:416 +msgid "Show all panels when starting program" +msgstr "Spectacle tous les plafons quand commençant programme. " + +#: ../src/gui/dialogs/prefDialog.cpp:419 +msgid "Show panels visible at last shutdown when starting program" +msgstr "" +"Plafons de spectacle visibles à dernier shutdown quand commençant programme. " + +#: ../src/gui/dialogs/prefDialog.cpp:426 +msgid "Show selected panels when starting program" +msgstr "Spectacle plafons sélectionnés quand commençant programme. " + +#: ../src/gui/dialogs/prefDialog.cpp:475 +msgid "Preferences" +msgstr "Préférences" + +#: ../src/gui/dialogs/prefDialog.cpp:477 +msgid "Set the method of panel layout when starting the program" +msgstr "" +"Définissez la méthode de la présentation du panneau lors du démarrage du " +"programme" + +#: ../src/gui/dialogs/prefDialog.cpp:480 +msgid "" +"Lets the program check the internet to see if updates to the program version " +"are available, then notifies you about updates now and again." +msgstr "" +"Laisse le programme constate l'internet pour voir si actualitza à la version " +"de programme est disponible, alors te notifica environ actualitza de " +"tellement de en tellement de." + +#: ../src/gui/dialogs/prefDialog.cpp:482 +msgid "" +"By default, use an orthographic camera at startup. State files will override " +"this preference." +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:483 +msgid "Camera translation, orbit and swivel rates. " +msgstr "Traduction de càmera, orbite et swivel índexs. " + +#: ../src/gui/dialogs/prefDialog.cpp:484 +msgid "Camera zooming rate." +msgstr "Taux de caméra zoom. " + +#: ../src/gui/dialogs/prefDialog.cpp:486 +msgid "Reset the filter initial values back to program defaults" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:487 +msgid "Reset all filter initial values back to program defaults" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:559 +msgid "Filt. Default" +msgstr "" + +#: ../src/gui/dialogs/prefDialog.cpp:561 +msgid "Camera" +msgstr "Appareil photo" + +#: ../src/gui/mainFrame.cpp:119 +msgid "New camera name..." +msgstr "Nom de càmera nouvelle..." + +#: ../src/gui/mainFrame.cpp:120 +msgid "New stash name..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:125 +msgid "New Filter..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:142 ../src/backend/filters/annotation.cpp:568 +#: ../src/backend/filters/annotation.cpp:672 +#: ../src/backend/filters/annotation.h:96 +msgid "Annotation" +msgstr "Annotation" + +#: ../src/gui/mainFrame.cpp:143 +msgid "Bounding Box" +msgstr "Tracé selon enveloppe" + +#: ../src/gui/mainFrame.cpp:144 ../src/backend/filters/ionClip.cpp:629 +#: ../src/backend/filters/ionClip.h:66 +msgid "Clipping" +msgstr "Saturation" + +#: ../src/gui/mainFrame.cpp:145 ../src/backend/filters/clusterAnalysis.h:151 +msgid "Cluster Analysis" +msgstr "Anàlisi de groupe. " + +#: ../src/gui/mainFrame.cpp:146 +msgid "Compos. Profiles" +msgstr "Compos. Profils. " + +#: ../src/gui/mainFrame.cpp:147 +msgid "Downsampling" +msgstr "Downsampling. " + +#: ../src/gui/mainFrame.cpp:148 +msgid "Extern. Prog." +msgstr "Extern. Prog." + +#: ../src/gui/mainFrame.cpp:149 +msgid "Ion Colour" +msgstr "Couleur d'ió. " + +#: ../src/gui/mainFrame.cpp:150 +msgid "Ion Info" +msgstr "Ió Info. " + +#: ../src/gui/mainFrame.cpp:151 +msgid "Ion Transform" +msgstr "L'Ió Transforme. " + +#: ../src/gui/mainFrame.cpp:152 ../src/backend/filters/spectrumPlot.h:76 +msgid "Spectrum" +msgstr "Spectre" + +#: ../src/gui/mainFrame.cpp:153 +msgid "Range File" +msgstr "Archives de gamme. " + +#: ../src/gui/mainFrame.cpp:154 ../src/backend/filters/spatialAnalysis.h:192 +msgid "Spat. Analysis" +msgstr "Spat. Anàlisi. " + +#: ../src/gui/mainFrame.cpp:155 ../src/backend/filters/voxelise.h:126 +msgid "Voxelisation" +msgstr "Voxelisation. " + +#: ../src/gui/mainFrame.cpp:453 +msgid "OpenGL Failed" +msgstr "OpenGL A failli. " + +#: ../src/gui/mainFrame.cpp:454 ../src/gui/mainFrame.cpp:456 +msgid "" +"Unable to initialise the openGL (3D) panel. Program cannot start. Please " +"check your video drivers." +msgstr "" +"Incapaç à initialise l'openGL (3D) plafó. Le Programme ne peut pas " +"commencer. Si vous plau constater vos conducteurs de vidéo." + +#: ../src/gui/mainFrame.cpp:477 +msgid "&Open...\tCtrl+O" +msgstr "&Ouvert... Ctrl+O. \t" + +#: ../src/gui/mainFrame.cpp:477 +msgid "Open state file" +msgstr "Archives estatal ouvert. " + +#: ../src/gui/mainFrame.cpp:478 +msgid "&Merge...\tCtrl+Shift+O" +msgstr "&Fusionne... Ctrl+Shift+O. \t" + +#: ../src/gui/mainFrame.cpp:478 +msgid "Merge other file" +msgstr "Fusionner autres archives. " + +#: ../src/gui/mainFrame.cpp:482 +msgid "&Recent" +msgstr "&Récent. " + +#: ../src/gui/mainFrame.cpp:483 +msgid "&Save\tCtrl+S" +msgstr "&Sauve\tCtrl+S. " + +#: ../src/gui/mainFrame.cpp:483 +msgid "Save state to file" +msgstr "Sauve estatal d'archiver. " + +#: ../src/gui/mainFrame.cpp:485 +msgid "Save &As...\tCtrl+Shift+S" +msgstr "Sauve &Tellement... Ctrl+Changement+S. \t" + +#: ../src/gui/mainFrame.cpp:485 +msgid "Save current state to new file" +msgstr "Sauvez été actuel à archives nouveau. " + +#: ../src/gui/mainFrame.cpp:488 +msgid "&Plot...\tCtrl+P" +msgstr "&Trama... Ctrl+P. \t" + +#: ../src/gui/mainFrame.cpp:488 +msgid "Export Current Plot" +msgstr "Exportation Trama Actuelle. " + +#: ../src/gui/mainFrame.cpp:489 +msgid "&Image...\tCtrl+I" +msgstr "&Image... Ctrl+Je. \t" + +#: ../src/gui/mainFrame.cpp:489 +msgid "Export Current 3D View" +msgstr "Courant d'exportation 3Dème Vue. " + +#: ../src/gui/mainFrame.cpp:490 +msgid "Ion&s...\tCtrl+N" +msgstr "Ió&s... Ctrl+N. \t" + +#: ../src/gui/mainFrame.cpp:490 +msgid "Export Ion Data" +msgstr "Donnée d'Ió de l'exportation. " + +#: ../src/gui/mainFrame.cpp:491 +msgid "Ran&ges...\tCtrl+G" +msgstr "A couru&ges... Ctrl+G. \t" + +#: ../src/gui/mainFrame.cpp:491 +msgid "Export Range Data" +msgstr "Donnée de Gamme de l'exportation. " + +#: ../src/gui/mainFrame.cpp:492 +msgid "&Animate Filters...\tCtrl+T" +msgstr "" + +#: ../src/gui/mainFrame.cpp:492 +msgid "Export Animated Filter" +msgstr "" + +#: ../src/gui/mainFrame.cpp:493 +msgid "Ani&mate Camera...\tCtrl+M" +msgstr "" + +#: ../src/gui/mainFrame.cpp:493 +msgid "Export Animated Camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:494 +msgid "Pac&kage...\tCtrl+K" +msgstr "Pac&kage... Ctrl+K. \t" + +#: ../src/gui/mainFrame.cpp:494 +msgid "Export analysis package" +msgstr "Colis d'anàlisi de l'exportation. " + +#: ../src/gui/mainFrame.cpp:496 +msgid "&Export" +msgstr "&Exporter" + +#: ../src/gui/mainFrame.cpp:499 +msgid "&Quit\tCtrl+Q" +msgstr "&Quit\tCtrl+Q. " + +#: ../src/gui/mainFrame.cpp:499 ../src/gui/mainFrame.cpp:501 +msgid "Exit Program" +msgstr "Programme de sortie. " + +#: ../src/gui/mainFrame.cpp:501 +msgid "E&xit" +msgstr "&Quitter" + +#: ../src/gui/mainFrame.cpp:503 +msgid "&File" +msgstr "&Fichier" + +#: ../src/gui/mainFrame.cpp:507 +msgid "&Background Colour...\tCtrl+B" +msgstr "&Couleur de fond... Ctrl+B. \t" + +#: ../src/gui/mainFrame.cpp:507 +msgid "Change background colour" +msgstr "Couleur de fond du changement. " + +#: ../src/gui/mainFrame.cpp:511 +msgid "&Control Pane\tF2" +msgstr "" + +#: ../src/gui/mainFrame.cpp:511 ../src/gui/mainFrame.cpp:514 +msgid "Toggle left control pane" +msgstr "Toggle Contrôle laissé pane. " + +#: ../src/gui/mainFrame.cpp:514 +msgid "&Control Pane\tAlt+C" +msgstr "&Contrôle Pane\tGrand+Cème. " + +#: ../src/gui/mainFrame.cpp:520 +msgid "&Raw Data Pane\tF3" +msgstr "" + +#: ../src/gui/mainFrame.cpp:520 ../src/gui/mainFrame.cpp:523 +msgid "Toggle raw data pane (bottom)" +msgstr "Toggle Donnée crue pane (inferior). " + +#: ../src/gui/mainFrame.cpp:523 +msgid "&Raw Data Pane\tAlt+R" +msgstr "&Donnée crue Pane\tGrand+R. " + +#: ../src/gui/mainFrame.cpp:527 +msgid "&Plot List\tF4" +msgstr "" + +#: ../src/gui/mainFrame.cpp:527 ../src/gui/mainFrame.cpp:529 +msgid "Toggle plot list" +msgstr "Toggle Liste de trama. " + +#: ../src/gui/mainFrame.cpp:529 +msgid "&Plot List\tAlt+P" +msgstr "&Liste de trama\tGrand+P. " + +#: ../src/gui/mainFrame.cpp:535 +msgid "&Legend\tCtrl+L" +msgstr "&Légende\tCtrl+L. " + +#: ../src/gui/mainFrame.cpp:535 +msgid "Toggle Legend display" +msgstr "Toggle écran de légende. " + +#: ../src/gui/mainFrame.cpp:537 +msgid "P&lot..." +msgstr "P&Parcel·la..." + +#: ../src/gui/mainFrame.cpp:538 +msgid "&Axis\tCtrl+Shift+I" +msgstr "&Axe\tCtrl+Shift+je. " + +#: ../src/gui/mainFrame.cpp:538 +msgid "Toggle World Axis display" +msgstr "Toggle écran Eixa mondial. " + +#: ../src/gui/mainFrame.cpp:543 +msgid "&Fullscreen mode\tF11" +msgstr "&Fullscreen Mode\tF11. " + +#: ../src/gui/mainFrame.cpp:543 ../src/gui/mainFrame.cpp:545 +msgid "Next fullscreen mode: with toolbars" +msgstr "Proche fullscreen mode: avec toolbars. " + +#: ../src/gui/mainFrame.cpp:545 +msgid "&Fullscreen mode\tCtrl+Shift+F" +msgstr "&Fullscreen Mode\tCtrl+Shift+F. " + +#: ../src/gui/mainFrame.cpp:550 +msgid "&Undo\tCtrl+Z" +msgstr "&Défait\tCtrl+Z. " + +#: ../src/gui/mainFrame.cpp:552 +msgid "&Redo\tCtrl+Y" +msgstr "&Redo\tCtrl+Y. " + +#: ../src/gui/mainFrame.cpp:555 +msgid "&Range" +msgstr "" + +#: ../src/gui/mainFrame.cpp:558 +msgid "&Preferences" +msgstr "&Préférences" + +#: ../src/gui/mainFrame.cpp:560 +msgid "&Edit" +msgstr "É&dition" + +#: ../src/gui/mainFrame.cpp:563 +msgid "&View" +msgstr "&Affichage" + +#: ../src/gui/mainFrame.cpp:565 +msgid "&Help...\tCtrl+H" +msgstr "&Aide... Ctrl+H. \t" + +#: ../src/gui/mainFrame.cpp:565 +msgid "Show help files and documentation" +msgstr "Archives d'aide du spectacle et documentation. " + +#: ../src/gui/mainFrame.cpp:566 +msgid "&Contact..." +msgstr "&Contact..." + +#: ../src/gui/mainFrame.cpp:566 +msgid "Open contact page" +msgstr "Page de contact ouvert. " + +#: ../src/gui/mainFrame.cpp:568 +msgid "&About..." +msgstr "À &propos de..." + +#: ../src/gui/mainFrame.cpp:568 +msgid "Information about this program" +msgstr "Information enveloppe ce programme. " + +#: ../src/gui/mainFrame.cpp:569 +msgid "&Help" +msgstr "Aid&e" + +#: ../src/gui/mainFrame.cpp:571 +msgid "Stashed Filters" +msgstr "Stashed Filtres. " + +#: ../src/gui/mainFrame.cpp:576 +msgid "New Filters" +msgstr "" + +#: ../src/gui/mainFrame.cpp:606 +msgid "Auto Refresh" +msgstr "Voiture Refresh. " + +#: ../src/gui/mainFrame.cpp:612 +msgid "Filter settings" +msgstr "Paramètres de filtrage" + +#: ../src/gui/mainFrame.cpp:615 +msgid "Camera Name" +msgstr "Nom de càmera. " + +#: ../src/gui/mainFrame.cpp:627 +msgid "Resize to Fit" +msgstr "" + +#: ../src/gui/mainFrame.cpp:629 +msgid "3D Post-processing" +msgstr "Post-traitement 3D" + +#: ../src/gui/mainFrame.cpp:631 +msgid "Enable Cropping" +msgstr "Activer recadrage" + +#: ../src/gui/mainFrame.cpp:633 ../src/gui/mainFrame.cpp:644 +msgid "x-y" +msgstr "x-y. " + +#: ../src/gui/mainFrame.cpp:634 ../src/gui/mainFrame.cpp:645 +msgid "x-z" +msgstr "x-z. " + +#: ../src/gui/mainFrame.cpp:635 ../src/gui/mainFrame.cpp:646 +msgid "y-x" +msgstr "y-x. " + +#: ../src/gui/mainFrame.cpp:636 ../src/gui/mainFrame.cpp:647 +msgid "y-z" +msgstr "y-z. " + +#: ../src/gui/mainFrame.cpp:637 ../src/gui/mainFrame.cpp:648 +msgid "z-x" +msgstr "z-x. " + +#: ../src/gui/mainFrame.cpp:638 ../src/gui/mainFrame.cpp:649 +msgid "z-y" +msgstr "z-y. " + +#: ../src/gui/mainFrame.cpp:653 +msgid "Use camera coordinates" +msgstr "Coordenades de càmera de l'usage. " + +#: ../src/gui/mainFrame.cpp:654 +msgid "dX" +msgstr "dX. " + +#: ../src/gui/mainFrame.cpp:656 +msgid "dY" +msgstr "dY. " + +#: ../src/gui/mainFrame.cpp:658 +msgid "dZ" +msgstr "dZ. " + +#: ../src/gui/mainFrame.cpp:660 +msgid "Enable Anaglyphic Stereo" +msgstr "Activer stéréo anaglyphe" + +#: ../src/gui/mainFrame.cpp:661 +msgid "Flip Channels" +msgstr "Canals de ditada. " + +#: ../src/gui/mainFrame.cpp:662 +msgid "Anaglyph Mode" +msgstr "Anaglyph Mode. " + +#: ../src/gui/mainFrame.cpp:664 +msgid "Red-Blue" +msgstr "Rouge-Bleu. " + +#: ../src/gui/mainFrame.cpp:665 +msgid "Red-Green" +msgstr "Rouge-Vert. " + +#: ../src/gui/mainFrame.cpp:666 +msgid "Red-Cyan" +msgstr "Rouge-Cyan. " + +#: ../src/gui/mainFrame.cpp:667 +msgid "Green-Magenta" +msgstr "Vert-Magenta. " + +#: ../src/gui/mainFrame.cpp:671 +msgid "Baseline Separation" +msgstr "Baseline écart. " + +#: ../src/gui/mainFrame.cpp:673 ../src/backend/filters/voxelise.cpp:1150 +#: ../src/backend/filters/voxelise.cpp:1409 +#: ../src/backend/filters/profile.cpp:1168 +#: ../src/backend/filters/boundingBox.cpp:732 +#: ../src/backend/filters/annotation.cpp:914 +#: ../src/backend/filters/dataLoad.cpp:755 +#: ../src/backend/filters/spectrumPlot.cpp:686 +msgid "Appearance" +msgstr "" + +#: ../src/gui/mainFrame.cpp:674 +msgid "Smooth && translucent objects" +msgstr "Objets translúcids objets" + +#: ../src/gui/mainFrame.cpp:676 +msgid "3D lighting" +msgstr "3D enllumenat. " + +#: ../src/gui/mainFrame.cpp:679 +msgid "Performance" +msgstr "" + +#: ../src/gui/mainFrame.cpp:680 +msgid "Fast and weak randomisation." +msgstr "Randomisation rapide et faible." + +#: ../src/gui/mainFrame.cpp:682 +msgid "Limit Output Pts" +msgstr "" + +#: ../src/gui/mainFrame.cpp:687 +msgid "Filter caching" +msgstr "Filtre caching. " + +#: ../src/gui/mainFrame.cpp:689 +msgid "Max. Ram usage (%)" +msgstr "Max. Bouquet Usage (%). " + +#: ../src/gui/mainFrame.cpp:761 +msgid "Warning: Your configuration file appears to be invalid:\n" +msgstr "Attention: Votre fichier de configuration semble invalide:\n" + +#: ../src/gui/mainFrame.cpp:762 +msgid "\tConfig Load: " +msgstr "\tConfig Charge:. " + +#: ../src/gui/mainFrame.cpp:1060 +msgid "Current state has not been saved, would you like to save it now?" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1061 +msgid "State changed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1079 +msgid "Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1081 +msgid "XML State File (*.xml)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1082 +msgid "POS File (*.pos)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1083 +msgid "LAWATAP ATO File (*.ato)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1084 +msgid "Text File (*.txt, *.csv)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1085 +msgid "3Dap Files (*.ops)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1086 +msgid "All Files (*)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1099 ../src/gui/mainFrame.cpp:1148 +msgid "Select Data or State File..." +msgstr "Sélectionner des données ou fichier d'état ..." + +#: ../src/gui/mainFrame.cpp:1149 +msgid "" +"3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|" +"XML State File (*.xml)|*.xml|All Files (*)|*" +msgstr "" +"3Décrit archives (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS Archives (*.pos)|" +"*.pos|XML Archives estatal (*.xml)|*.xml|Toutes les Archives (*)|*. " + +#: ../src/gui/mainFrame.cpp:1160 +msgid "Merged file." +msgstr "Archives fusionnées." + +#: ../src/gui/mainFrame.cpp:1263 +msgid "Tip: You can use ⌘ (command) to merge" +msgstr "Astuce: Vous pouvez utiliser ⌘ (commande) de fusionner" + +#: ../src/gui/mainFrame.cpp:1265 +msgid "Tip: You can use ctrl to merge" +msgstr "Astuce: Vous pouvez utiliser la touche ctrl pour fusionner" + +#: ../src/gui/mainFrame.cpp:1299 +msgid "Load error" +msgstr "Erreur de chargement" + +#: ../src/gui/mainFrame.cpp:1300 +msgid "" +"Error loading state file.\n" +"See console for more info." +msgstr "" +"Fichier d'état d'erreur de chargement.\n" +"Voir la console pour plus d'informations." + +#: ../src/gui/mainFrame.cpp:1308 +msgid "" +"This state file contains filters that can be unsafe to run\n" +"Do you wish to remove these before continuing?." +msgstr "" +"Ce fichier contient l'état des filtres qui peuvent être dangereux à courir\n" +"Voulez-vous supprimer ces avant de continuer?." + +#: ../src/gui/mainFrame.cpp:1309 +msgid "Security warning" +msgstr "Alerte de sécurité" + +#: ../src/gui/mainFrame.cpp:1499 ../src/gui/mainFrame.cpp:1595 +#: ../src/gui/mainFrame.cpp:2029 +msgid "Unable to save" +msgstr "Impossible d'enregistrer" + +#: ../src/gui/mainFrame.cpp:1500 +msgid "No plot available. Please create a plot before exporting." +msgstr "" +"Pas d'intrigue disponibles. S'il vous plaît créer un terrain avant " +"d'exporter." + +#: ../src/gui/mainFrame.cpp:1504 +msgid "Save plot..." +msgstr "Sauve trama..." + +#: ../src/gui/mainFrame.cpp:1505 +msgid "" +"By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*." +"svg|PNG File (*.png)|*.png|All Files (*)|*" +msgstr "" +"Pour Extension (svg,png)|*.svg;*.png|Scalable Archives de Graphiques du " +"vector (*.svg)|*.svg|PNG Archives (*.png)|*.png|Toutes les Archives (*)|*. " + +#: ../src/gui/mainFrame.cpp:1559 +msgid "Select type for save" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1560 +msgid "Choose file type" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1580 ../src/gui/mainFrame.cpp:1637 +#: ../src/gui/mainFrame.cpp:1673 +msgid "Choose resolution" +msgstr "écueil résolution. " + +#: ../src/gui/mainFrame.cpp:1596 +msgid "Unknown file extension. Please use \"svg\" or \"png\"" +msgstr "Extension d'archives inconnu. Si vous plau usage. " + +#: ../src/gui/mainFrame.cpp:1607 +msgid "Saved plot: " +msgstr "Trama sauvée:. " + +#: ../src/gui/mainFrame.cpp:1614 ../src/gui/mainFrame.cpp:1666 +msgid "Save Image..." +msgstr "Sauve Image..." + +#: ../src/gui/mainFrame.cpp:1615 ../src/gui/mainFrame.cpp:1667 +msgid "PNG File (*.png)|*.png|All Files (*)|*" +msgstr "PNG Archives (*.png)|*.png|Toutes les Archives (*)|*. " + +#: ../src/gui/mainFrame.cpp:1629 +msgid "File already exists. Overwrite?" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1630 ../src/gui/mainFrame.cpp:2425 +#: ../src/gui/mainFrame.cpp:2531 ../src/gui/mainFrame.cpp:2554 +msgid "Overwrite?" +msgstr "Écraser ?" + +#: ../src/gui/mainFrame.cpp:1657 ../src/gui/mainFrame.cpp:1733 +msgid "Saved 3D View :" +msgstr "Sauvé 3Dème Vue :. " + +#: ../src/gui/mainFrame.cpp:1687 +msgid "Program limitation" +msgstr "Limitation de programme. " + +#: ../src/gui/mainFrame.cpp:1688 +msgid "" +"Limitation on the screenshot dimension; please ensure that both width and " +"height exceed the initial values,\n" +" or that they are smaller than the initial values.\n" +" If this bothers, please submit a bug." +msgstr "" +"Limitation en le screenshot dimension; si vous plau assurer qu'ambdues " +"amplada et la levée surpassent les valeurs inicials,\n" +" ou que sont plus petits que les valeurs inicials. Si\n" +" ce dérange, si vous plau entregar un bug." + +#: ../src/gui/mainFrame.cpp:1705 +msgid "Number of frames" +msgstr "Nombre d'images" + +#: ../src/gui/mainFrame.cpp:1759 +msgid "Abo&rt" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1761 +msgid "&Refresh" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1870 +msgid "Cannot animate with no filters." +msgstr "" + +#: ../src/gui/mainFrame.cpp:1952 +msgid "Animating" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1953 +msgid "Performing refresh" +msgstr "" + +#: ../src/gui/mainFrame.cpp:1979 +msgid "Filter property change failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2001 +msgid "Refresh failed on frame :" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2030 +msgid "Image save failed for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2055 +msgid "Ion save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2056 +msgid "Unable to save ions for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2087 +msgid "Plot save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2088 +msgid "Unable to save plot or frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2129 +msgid "Range save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2130 +msgid "Unable to save range for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2159 +msgid "Voxel save failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2160 +msgid "Unable to save voxels for frame " +msgstr "" + +#: ../src/gui/mainFrame.cpp:2189 +msgid "Animate failed" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2213 ../src/gui/mainFrame.cpp:2379 +#: ../src/gui/mainFrame.cpp:2486 +msgid "No filters means no data to export" +msgstr "Pas de filtres signifie pas de données à exporter" + +#: ../src/gui/mainFrame.cpp:2227 +msgid "Package name" +msgstr "Nom du paquet" + +#: ../src/gui/mainFrame.cpp:2228 +msgid "Package directory name" +msgstr "Nom de directori du colis. " + +#: ../src/gui/mainFrame.cpp:2230 +msgid "AnalysisPackage" +msgstr "AnalysisPackage. " + +#: ../src/gui/mainFrame.cpp:2243 +msgid "Package folder already exists, won't overwrite." +msgstr "Carpeta de colis déjà existe, n'overwrite." + +#: ../src/gui/mainFrame.cpp:2244 +msgid "Not available" +msgstr "Non disponible" + +#: ../src/gui/mainFrame.cpp:2269 +msgid "" +"Package folder creation failed\n" +"check writing to this location is possible." +msgstr "" +"Création d'un dossier package a échoué\n" +" vérifier par écrit à cet endroit est possible." + +#: ../src/gui/mainFrame.cpp:2270 +msgid "Folder creation failed" +msgstr "Création du dossier n'a pas" + +#: ../src/gui/mainFrame.cpp:2290 +msgid "Copying" +msgstr "Copie en cours" + +#: ../src/gui/mainFrame.cpp:2291 +msgid "Copying referenced files" +msgstr "Copie de fichiers référencés" + +#: ../src/gui/mainFrame.cpp:2357 +msgid "Error copying file" +msgstr "L'Erreur que copia archives. " + +#: ../src/gui/mainFrame.cpp:2366 +msgid "Saved package: " +msgstr "Colis sauvé:. " + +#: ../src/gui/mainFrame.cpp:2390 +msgid "Export" +msgstr "Export" + +#: ../src/gui/mainFrame.cpp:2396 +msgid "" +"POS Data (*.pos)|*.pos|Text File (*.txt)|*.txt|VTK Legacy (*.vtk)|*.vtk|All " +"Files (*)|*" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2424 ../src/gui/mainFrame.cpp:2530 +msgid "File already exists, overwrite?" +msgstr "Le Archives déjà existe, écraser?" + +#: ../src/gui/mainFrame.cpp:2465 +msgid "Saved ions: " +msgstr "Ions sauvés:. " + +#: ../src/gui/mainFrame.cpp:2490 +msgid "Export Ranges" +msgstr "Gammes d'exportation. " + +#: ../src/gui/mainFrame.cpp:2512 +msgid "Save state..." +msgstr "Sauve estatal..." + +#: ../src/gui/mainFrame.cpp:2513 +msgid "XML state file (*.xml)|*.xml|All Files (*)|*" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2553 +msgid "Files have been referred to using relative paths. Keep relative paths?" +msgstr "" +"Les Archives ont été referred à utiliser des chemins relatifs. Il entretient " +"des chemins relatifs?. " + +#: ../src/gui/mainFrame.cpp:2586 +msgid "Saved state: " +msgstr "été sauvé:. " + +#: ../src/gui/mainFrame.cpp:2662 +msgid "Range editor" +msgstr "" + +#: ../src/gui/mainFrame.cpp:2929 +msgid "Manual not found locally. Launching web browser" +msgstr "Manuel pas trouvé localement. Lancement navigateur Web" + +#: ../src/gui/mainFrame.cpp:2938 +msgid "Opening contact page in external web browser" +msgstr "Ouverture page de contact dans le navigateur web externe." + +#: ../src/gui/mainFrame.cpp:2946 +msgid "No filter stashes to edit." +msgstr "Chef filtre stashes pour editar." + +#: ../src/gui/mainFrame.cpp:2950 +msgid "Filter Stashes" +msgstr "Filtre Stashes. " + +#: ../src/gui/mainFrame.cpp:2967 +msgid "Quick and dirty analysis for point data." +msgstr "Anàlisi rapide et sale pour donnée de point." + +#: ../src/gui/mainFrame.cpp:2977 +msgid "Compiled with wx Version: " +msgstr "Compilat avec wx Version:. " + +#: ../src/gui/mainFrame.cpp:2998 +msgid "Press enter to store new stash" +msgstr "La Presse rentre à pour stocker nouveau stash. " + +#: ../src/gui/mainFrame.cpp:3004 +msgid "Press enter to restore stash" +msgstr "La Presse rentre à pour restaurer stash. " + +#: ../src/gui/mainFrame.cpp:3037 +msgid "Unable to create stash, selection invalid" +msgstr "Incapaç de créer stash, invalide de sélection. " + +#: ../src/gui/mainFrame.cpp:3044 +msgid "Created new filter tree stash" +msgstr "Arbre de filtre nouveau créé stash. " + +#: ../src/gui/mainFrame.cpp:3156 +msgid "Filter type not a data source - can't be at tree base" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete\tDel" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3236 +msgid "Delete the selected filter" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3351 +msgid "Moving - Hold ⌘ (command) to copy, shift to splice" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3353 +msgid "Moving - Hold control to copy, shift to splice" +msgstr "" + +#: ../src/gui/mainFrame.cpp:3696 +msgid "Press enter to store new camera" +msgstr "Appuyez sur Entrée pour enregistrer nouvel appareil photo" + +#: ../src/gui/mainFrame.cpp:3698 +msgid "Press enter to restore camera" +msgstr "La Presse rentre à pour restaurer càmera. " + +#: ../src/gui/mainFrame.cpp:3723 ../src/gui/mainFrame.cpp:3764 +msgid "Restored camera: " +msgstr "Càmera restaurée:. " + +#: ../src/gui/mainFrame.cpp:3741 +msgid "Stored camera: " +msgstr "Càmera stockée:. " + +#: ../src/gui/mainFrame.cpp:3827 +msgid "Select an item from the filter tree before choosing a new filter" +msgstr "" +"Sélectionnez un élément de l'arbre de filtre avant de choisir un nouveau " +"filtre" + +#: ../src/gui/mainFrame.cpp:3829 +msgid "Load data source (file->open) before choosing a new filter" +msgstr "" +"Source de donnée de la charge (archives->ouvertes) avant de choisir un " +"filtre nouveau. " + +#: ../src/gui/mainFrame.cpp:3855 +msgid "Select RNG File..." +msgstr "Sélectionne RNG Archives..." + +#: ../src/gui/mainFrame.cpp:3876 +msgid "Failed reading range file." +msgstr "Archives de gamme de lecture failli." + +#: ../src/gui/mainFrame.cpp:3880 +msgid "Error loading file" +msgstr "Erreur lors du chargement du fichier" + +#: ../src/gui/mainFrame.cpp:3941 ../src/gui/mainFrame.cpp:4042 +#: ../src/gui/mainFrame.cpp:5554 ../src/gui/mainFrame.cpp:6073 +msgid "Cons." +msgstr "Contres." + +#: ../src/gui/mainFrame.cpp:4005 +msgid "Refresh Aborted." +msgstr "Refresh Va avortar." + +#: ../src/gui/mainFrame.cpp:4046 +msgid "*Cons." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4048 +msgid "§Cons." +msgstr "§Contres." + +#: ../src/gui/mainFrame.cpp:4110 +msgid "Complete" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4208 +msgid "msgs" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4249 +msgid "Autosave complete." +msgstr "Enregistrement automatique terminé." + +#: ../src/gui/mainFrame.cpp:4453 +msgid "Aborting...." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4519 +msgid "Updated." +msgstr "Mis à jour." + +#: ../src/gui/mainFrame.cpp:4528 +msgid "Calculating..." +msgstr "" + +#: ../src/gui/mainFrame.cpp:4531 +msgid "% Done (Esc aborts)" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4533 +msgid "% Done" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4808 +msgid "Tip: You can shift-click to force full refresh, if required" +msgstr "" + +#: ../src/gui/mainFrame.cpp:4870 +msgid "No data to save" +msgstr "Chef donnée pour sauver. " + +#: ../src/gui/mainFrame.cpp:5052 +msgid "Aborting..." +msgstr "Abandon..." + +#: ../src/gui/mainFrame.cpp:5058 +msgid "" +"Waiting for refresh to abort. Exiting could lead to the program " +"backgrounding. Exit anyway? " +msgstr "" +"en Attendant pour refresh pour avortar. en Sortant pourrait porter au " +"programme backgrounding. Sortie de toute façon?. " + +#: ../src/gui/mainFrame.cpp:5059 ../src/gui/mainFrame.cpp:5079 +msgid "Confirmation request" +msgstr "Petició de confirmació. " + +#: ../src/gui/mainFrame.cpp:5078 +msgid "Are you sure you wish to exit 3Depict?" +msgstr "T'est sûr souhaites sortir 3Depict?. " + +#: ../src/gui/mainFrame.cpp:5582 +msgid "Update Notice: New version " +msgstr "Actualitza Avís: version Nouvelle. " + +#: ../src/gui/mainFrame.cpp:5582 +msgid " found online." +msgstr " Trouvé en ligne." + +#: ../src/gui/mainFrame.cpp:5586 +msgid "Online Check: " +msgstr "Contrôle en ligne:. " + +#: ../src/gui/mainFrame.cpp:5586 +msgid " is up-to-date." +msgstr " Est actuel." + +#: ../src/gui/mainFrame.cpp:5676 +msgid "An auto-save state was found, would you like to restore it?." +msgstr "Une voiture-sauver l'état a été trouvé, te plaît le restaurer?." + +#: ../src/gui/mainFrame.cpp:5677 +msgid "Autosave" +msgstr "Enregistrement automatique" + +#: ../src/gui/mainFrame.cpp:5684 +msgid "Unable to load autosave file.." +msgstr "Impossible de charger le fichier d'enregistrement automatique .." + +#: ../src/gui/mainFrame.cpp:5875 +msgid "List of available filters" +msgstr "Liste de filtres disponibles. " + +#: ../src/gui/mainFrame.cpp:5877 +msgid "" +"Tree - drag to move items, hold ⌘ for copy, shift for splice. Tap delete to " +"remove items, multi-click to rename" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5879 +msgid "" +"Tree - drag to move items, hold Ctrl for copy, shift for splice. Tap delete " +"to remove items, multi-click to rename." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5881 +msgid "" +"Enable/Disable automatic updates of data when filter change takes effect" +msgstr "" +"Habilitar/Impossibilitar automatique actualitza de donnée quand changement " +"de filtre prend effet. " + +#: ../src/gui/mainFrame.cpp:5884 +msgid "" +"Enable/Disable \"Alpha blending\" (transparency) in rendering system. " +"Blending is used to smooth objects (avoids artefacts known as \"jaggies\") " +"and to make transparent surfaces. Disabling will provide faster rendering " +"but look more blocky" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5885 +msgid "" +"Enable/Disable lighting calculations in rendering, for objects that request " +"this. Lighting provides important depth cues for objects comprised of 3D " +"surfaces. Disabling may allow faster rendering in complex scenes" +msgstr "" +"Activer / Désactiver les calculs d'éclairage dans le rendu, pour les objets " +"qui demandent cela. Eclairage fournit des indices importants pour la " +"profondeur des objets constitués de surfaces 3D. Désactivation peut " +"permettre un rendu plus rapide dans des scènes complexes" + +#: ../src/gui/mainFrame.cpp:5886 +msgid "" +"Enable/Disable weak randomisation (Galois linear feedback shift register). " +"Strong randomisation uses a much slower random selection method, but " +"provides better protection against inadvertent correlations, and is " +"recommended for final analyses" +msgstr "" +"Habilitar/Impossibilitar dèbil randomisation (Galois lineal feedback " +"registre de changement). Fort randomisation utilise une beaucoup de " +"sélection aleatòria plus lente méthode, mais il fournit de la protection " +"meilleure contre inadvertent correlacions, et c'est recommandé pour anàlisis " +"finaux. " + +#: ../src/gui/mainFrame.cpp:5888 +msgid "" +"Limit the number of points that can be displayed in the 3D scene. Does not " +"affect filter tree calculations. Disabling this can severely reduce " +"performance, due to large numbers of points being visible at once." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5889 +msgid "" +"Enable/Disable caching of intermediate results during filter updates. " +"Disabling caching will use less system RAM, though changes to any filter " +"property will cause the entire filter tree to be recomputed, greatly slowing " +"computations" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5891 +msgid "Camera data information" +msgstr "Information de donnée de la càmera. " + +#: ../src/gui/mainFrame.cpp:5895 +msgid "Enable/disable visual effects on final 3D output" +msgstr "Activer / désactiver les effets visuels sur la production 3D finale" + +#: ../src/gui/mainFrame.cpp:5897 +msgid "Enable cropping post-process effect" +msgstr "Activer culture post-traitement d'effet" + +#: ../src/gui/mainFrame.cpp:5900 +msgid "" +"Colour based 3D effect enable/disable - requires appropriate colour filter " +"3D glasses." +msgstr "" +"Couleur basée sur les effets 3D d'activer / désactiver - exige appropriées " +"de filtrage de couleur des lunettes 3D." + +#: ../src/gui/mainFrame.cpp:5901 +msgid "Glasses colour mode" +msgstr "Mode de couleur des verres. " + +#: ../src/gui/mainFrame.cpp:5903 +msgid "" +"Level of separation between left and right images, which sets 3D depth to " +"visual distortion tradeoff" +msgstr "" +"Niveau de la séparation entre les images gauche et droite, qui définit la " +"profondeur 3D à compromis distorsion visuelle" + +#: ../src/gui/mainFrame.cpp:5907 +msgid "X" +msgstr "X" + +#: ../src/gui/mainFrame.cpp:5908 +msgid "Y" +msgstr "Y" + +#: ../src/gui/mainFrame.cpp:5909 +msgid "Save raw data to file" +msgstr "Sauve donnée crue pour archiver. " + +#: ../src/gui/mainFrame.cpp:5910 +msgid "Copy raw data to clipboard" +msgstr "Copie donnée crue à clipboard. " + +#: ../src/gui/mainFrame.cpp:5911 +msgid "Manage \"stashed\" data." +msgstr "" + +#: ../src/gui/mainFrame.cpp:5912 +msgid "Program text output" +msgstr "Sortie de texte du programme. " + +#: ../src/gui/mainFrame.cpp:5913 +msgid "Select active camera, or type to create new named camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5914 +msgid "Remove the selected camera" +msgstr "Càmera restaurée:. " + +#: ../src/gui/mainFrame.cpp:5915 +msgid "Perform cropping from coordinate frame of camera" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5916 +msgid "" +"Set the maximum amount of RAM to use in order to speed repeat computations" +msgstr "" + +#: ../src/gui/mainFrame.cpp:5917 +msgid "Collapse the filter tree" +msgstr "Arbre de filtre nouveau créé stash. " + +#: ../src/gui/mainFrame.cpp:5918 +msgid "Expand the filter tree" +msgstr "Arbre de filtre nouveau créé stash. " + +#: ../src/gui/mainFrame.cpp:5919 +msgid "Process the filter tree, hold shift to purge cached filter data" +msgstr "" + +#: ../src/gui/mainFrame.cpp:6033 +msgid "Crop" +msgstr "Découper" + +#: ../src/gui/mainFrame.cpp:6034 +msgid "Stereo" +msgstr "Stéréo" + +#: ../src/gui/mainFrame.cpp:6051 ../src/backend/filters/externalProgram.cpp:596 +#: ../src/backend/filters/ionColour.cpp:352 +#: ../src/backend/filters/spectrumPlot.cpp:615 +msgid "Data" +msgstr "Contenu" + +#: ../src/gui/mainFrame.cpp:6052 +msgid "Cam" +msgstr "Lève. " + +#: ../src/gui/mainFrame.cpp:6053 +msgid "Post" +msgstr "Publier" + +#: ../src/gui/mainFrame.cpp:6054 +msgid "Tools" +msgstr "Outils" + +#: ../src/gui/mainFrame.cpp:6072 +msgid "Raw" +msgstr "Brut" + +#: ../src/gui/mainFrame.cpp:6115 +msgid "Align Camera" +msgstr "" + +#: ../src/gui/mathglPane.cpp:264 +msgid "No plots selected." +msgstr "Chef trama a sélectionné." + +#: ../src/gui/mathglPane.cpp:1228 +msgid "" +"Unable to allocate requested memory.\n" +" Try a lower resolution, or save as vector (SVG)." +msgstr "" +"Impossible d'allouer de la mémoire demandée.\n" +"Essayez une résolution inférieure, ou enregistrer en tant que vecteur (SVG)." + +#: ../src/gui/mathglPane.cpp:1230 +msgid "Plotting functions returned an error:\n" +msgstr "Plotting Les Fonctions vont retornar une erreur:. \n" + +#: ../src/gui/mathglPane.cpp:1232 +msgid "File readback check failed" +msgstr "Archives readback le contrôle a failli. " + +#: ../src/gui/mathglPane.cpp:1234 +msgid "Filesize during readback appears to be zero." +msgstr "Filesize Pendant readback apparaît pour être zéro." + +#: ../src/3Depict.cpp:399 +msgid "File : " +msgstr "Archives :. " + +#: ../src/3Depict.cpp:399 +msgid " does not exist. Skipping" +msgstr " N'existe pas. Skipping. " + +#: ../src/backend/configFile.cpp:187 +msgid "Config file present, but is not valid (root node test)" +msgstr "" +"Fichier de configuration présente, mais n'est pas valide (test de nœud " +"racine)" + +#: ../src/backend/configFile.cpp:228 +msgid "Unable to interpret recent file entry" +msgstr "Impossible d'interpréter l'entrée des fichiers récents" + +#: ../src/backend/configFile.cpp:268 +msgid "Unable to determine filter type in defaults listing." +msgstr "Unable to determine filter type in defaults listing." + +#: ../src/backend/configFile.cpp:605 +msgid "Online access for non win32/apple platforms is intentionally disabled, " +msgstr "" +"Accès en ligne pour ne gagner32/plate-formes de pomme est intencionadament " +"impossibilité,. " + +#: ../src/backend/configFile.cpp:606 +msgid "" +"regardless of the settings you use here. Use your package manager to keep up-" +"to-date" +msgstr "" +"Malgré tout du settings t'utilise ici. Usage votre directeur de colis pour " +"entretenir actuel. " + +#: ../src/backend/plot.cpp:28 ../src/backend/filters/algorithms/mass.cpp:25 +#: ../src/backend/filters/voxelise.cpp:130 +#: ../src/backend/filters/voxelise.cpp:136 +#: ../src/backend/filters/spectrumPlot.cpp:76 +msgid "None" +msgstr "Aucun" + +#: ../src/backend/plot.cpp:29 +msgid "Moving avg." +msgstr "en Mouvant avg." + +#: ../src/backend/plot.cpp:33 +msgid "Lines" +msgstr "Lignes" + +#: ../src/backend/plot.cpp:34 +msgid "Bars" +msgstr "Barres" + +#: ../src/backend/plot.cpp:35 +msgid "Steps" +msgstr "Escaliers" + +#: ../src/backend/plot.cpp:36 +msgid "Stem" +msgstr "Tija. " + +#: ../src/backend/plot.cpp:37 +msgid "Points" +msgstr "Points" + +#: ../src/backend/plot.cpp:39 +msgid "Density" +msgstr "" + +#: ../src/backend/plot.cpp:40 +msgid "Scatter" +msgstr "" + +#: ../src/backend/plot.cpp:746 ../src/backend/plot.cpp:754 +msgid "Multiple data types" +msgstr "" + +#: ../src/backend/plot.cpp:1577 +msgid "error" +msgstr "error" + +#: ../src/backend/plot.cpp:1818 +msgid "Amplitude" +msgstr "" + +#: ../src/backend/filtertree.cpp:1150 +msgid "WARNING: Skipping node " +msgstr "AVíS: Skipping node. " + +#: ../src/backend/filtertree.cpp:1150 +msgid " as it was not recognised" +msgstr " Tandis que ne va pas être recognised. " + +#: ../src/backend/filtertree.cpp:1188 +msgid "Error processing node: " +msgstr "L'Erreur que processa node:. " + +#: ../src/backend/filters/externalProgram.cpp:259 +msgid "Collate Input" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:348 +msgid "Execute" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:389 +msgid "Collate output" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:564 +#: ../src/backend/filters/externalProgram.cpp:578 +msgid "Command" +msgstr "Commande" + +#: ../src/backend/filters/externalProgram.cpp:567 +msgid "" +"Full command to send to operating system. See manual for escape sequence " +"meanings" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:571 +msgid "Work Dir" +msgstr "Emploi Dire. " + +#: ../src/backend/filters/externalProgram.cpp:574 +msgid "Directory to run the command in" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:581 +msgid "Cleanup input" +msgstr "Cleanup Rentrée. " + +#: ../src/backend/filters/externalProgram.cpp:584 +msgid "Erase input files when command completed" +msgstr "" + +#: ../src/backend/filters/externalProgram.cpp:589 +msgid "Cache" +msgstr "Cache" + +#: ../src/backend/filters/externalProgram.cpp:592 +msgid "" +"Assume program does not alter its output, unless inputs from 3Depict are " +"altered" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:26 +msgid "Flat TOF" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:33 +msgid "INsufficient bins to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:34 +msgid "Insufficient counts to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:35 +msgid "Insufficient data to perform fit" +msgstr "" + +#: ../src/backend/filters/algorithms/mass.cpp:36 +msgid "Data did not appear to be random noise - cannot fit noise level" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:65 ../src/backend/filters/profile.cpp:53 +msgid "Sphere" +msgstr "Sphère" + +#: ../src/backend/filters/ionClip.cpp:66 +msgid "Plane" +msgstr "Plan" + +#: ../src/backend/filters/ionClip.cpp:67 +msgid "Cylinder" +msgstr "Cylindre" + +#: ../src/backend/filters/ionClip.cpp:68 +msgid "Aligned box" +msgstr "Aligned Caisse. " + +#: ../src/backend/filters/ionClip.cpp:498 +#: ../src/backend/filters/profile.cpp:995 +msgid "Primitive" +msgstr "Objet" + +#: ../src/backend/filters/ionClip.cpp:501 +msgid "Shape of clipping object" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:507 +#: ../src/backend/filters/profile.cpp:1001 +msgid "Show Primitive" +msgstr "Le Spectacle Primitiu. " + +#: ../src/backend/filters/ionClip.cpp:510 +msgid "Display the 3D interaction object" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:515 +msgid "Invert Clip" +msgstr "Invert Clip. " + +#: ../src/backend/filters/ionClip.cpp:518 +msgid "" +"Switch between retaining points inside (false) and outside (true) of " +"primitive" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:532 +#: ../src/backend/filters/profile.cpp:1058 +msgid "Position for centre of sphere" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:537 +#: ../src/backend/filters/ionClip.cpp:597 +#: ../src/backend/filters/spatialAnalysis.cpp:134 +#: ../src/backend/filters/profile.cpp:1041 +#: ../src/backend/filters/profile.cpp:1063 +msgid "Radius" +msgstr "Rayon" + +#: ../src/backend/filters/ionClip.cpp:540 +#: ../src/backend/filters/profile.cpp:1066 +msgid "Radius of sphere" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:554 +msgid "Position that plane passes through" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:559 +msgid "Plane Normal" +msgstr "L'Avion Normal. " + +#: ../src/backend/filters/ionClip.cpp:562 +msgid "Perpendicular direction for plane" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:576 +msgid "Centre of cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:581 +#: ../src/backend/filters/spatialAnalysis.cpp:947 +#: ../src/backend/filters/profile.cpp:1025 +#: ../src/backend/filters/transform.cpp:1293 +msgid "Axis" +msgstr "Axe" + +#: ../src/backend/filters/ionClip.cpp:584 +msgid "Positive vector for cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:589 +#: ../src/backend/filters/profile.cpp:1033 +msgid "Lock Axis Mag." +msgstr "Axe de pany Mag." + +#: ../src/backend/filters/ionClip.cpp:592 +msgid "Prevent changing length of cylinder during 3D interaction" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:600 +#: ../src/backend/filters/profile.cpp:1044 +msgid "Radius of cylinder" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:613 +msgid "Centre of axis aligned box" +msgstr "" + +#: ../src/backend/filters/ionClip.cpp:618 +msgid "Corner offset" +msgstr "Offset de coin. " + +#: ../src/backend/filters/ionClip.cpp:621 +msgid "Vector to corner of box" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:84 +#: ../src/backend/filters/clusterAnalysis.cpp:1060 +msgid "Size Distribution" +msgstr "Distribution de mida. " + +#: ../src/backend/filters/clusterAnalysis.cpp:85 +msgid "Chemistry Distribution" +msgstr "Distribution de chimie. " + +#: ../src/backend/filters/clusterAnalysis.cpp:503 +msgid "No range data. Can't cluster." +msgstr "Chef donnée de gamme. Il peut ne groupe." + +#: ../src/backend/filters/clusterAnalysis.cpp:514 +msgid "" +"No ranges selected for cluster \"core\". Cannot continue with clustering." +msgstr "Chef gamme a sélectionné pour groupe. " + +#: ../src/backend/filters/clusterAnalysis.cpp:523 +msgid "" +"No ranges selected for cluster \"bulk\". Cannot continue with clustering." +msgstr "Chef gamme a sélectionné pour groupe. " + +#: ../src/backend/filters/clusterAnalysis.cpp:689 +msgid "Morphology Plot" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:690 +msgid "\\lambda_1:\\lambda_2 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:691 +msgid "\\lambda_2:\\lambda_3 ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:736 +msgid "No clusters had sufficient dimensionality to compute singular values" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:794 +msgid "Found :" +msgstr "Trouvé :. " + +#: ../src/backend/filters/clusterAnalysis.cpp:796 +msgid " clusters" +msgstr " Groupes. " + +#: ../src/backend/filters/clusterAnalysis.cpp:888 +msgid "Compositions (fractional, core+bulk)" +msgstr "Compositions (fraccionari, noyau+bulk). " + +#: ../src/backend/filters/clusterAnalysis.cpp:890 +msgid "Compositions (fractional, core only)" +msgstr "Compositions (fraccionari, le noyau unique). " + +#: ../src/backend/filters/clusterAnalysis.cpp:908 +msgid "Frequencies (core+bulk)" +msgstr "Fréquences (noyau+bulk). " + +#: ../src/backend/filters/clusterAnalysis.cpp:939 +msgid "Core Link + Erode" +msgstr "Lien de noyau + Erosiona. " + +#: ../src/backend/filters/clusterAnalysis.cpp:943 +#: ../src/backend/filters/clusterAnalysis.cpp:951 +#: ../src/backend/filters/spatialAnalysis.cpp:707 +#: ../src/backend/filters/spatialAnalysis.cpp:715 +#: ../src/backend/filters/transform.cpp:1156 +#: ../src/backend/filters/ionInfo.cpp:549 +msgid "Algorithm" +msgstr "Algorithme" + +#: ../src/backend/filters/clusterAnalysis.cpp:947 +msgid "Cluster algorithm mode" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:958 +msgid "Core Classify" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:961 +msgid "" +"Enable core-classifcation pre-step in clustering (Stephenson et al, 2007)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:967 +msgid "Core Classify Dist" +msgstr "Le Noyau Classe Dist. " + +#: ../src/backend/filters/clusterAnalysis.cpp:970 +msgid "Restrict only atoms by distance to be cluster sources" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:975 +msgid "Classify Knn Max" +msgstr "Classe Knn Max. " + +#: ../src/backend/filters/clusterAnalysis.cpp:978 +msgid "" +"Require that the kth NN (this number) is within the classify distance, to be " +"a cluster source" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:984 +msgid "Core Link Dist" +msgstr "Lien de noyau Dist. " + +#: ../src/backend/filters/clusterAnalysis.cpp:987 +msgid "Distance between clusters to allow linking" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:992 +msgid "Bulk Link" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:995 +#: ../src/backend/filters/clusterAnalysis.cpp:1012 +msgid "Enable linking of non-cluster species - eg for composition analysis " +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1002 +msgid "Bulk Link (Envelope) Dist" +msgstr "Bulk Lien (Enveloppe) Dist. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1005 +msgid "" +"Distance from core points that form cluster that is used to grab surrounding " +"bulk points" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1009 +msgid "Erosion" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1018 +msgid "Erode Dist" +msgstr "Erosiona Dist. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1021 +msgid "" +"Distance from unclustered material in which bulk points are eroded from " +"cluster" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1028 +msgid "Clustering Params" +msgstr "Clustering Params. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1033 +msgid "Size Cropping" +msgstr "Mida Cropping. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1036 +msgid "Remove clusters based upon size distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1043 +msgid "Min Size" +msgstr "Taille min." + +#: ../src/backend/filters/clusterAnalysis.cpp:1046 +msgid "Remove clusters below this size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1051 +msgid "Max Size" +msgstr "Taille max." + +#: ../src/backend/filters/clusterAnalysis.cpp:1054 +msgid "Remove clusters above this size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1063 +msgid "Show number of clusters as a function of cluster size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1069 +msgid "Log Scale" +msgstr "Log échelle. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1072 +msgid "Use logarithmic scale for size distribution" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1079 +msgid "Morphology Dist." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1082 +msgid "Create a plot showing cluster aspect ratio" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1088 +msgid "Cluster Id" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1091 +msgid "Assign cluster output a unique per-cluster value (id)." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1098 +msgid "Chemistry Dist." +msgstr "Chimie Dist." + +#: ../src/backend/filters/clusterAnalysis.cpp:1101 +msgid "Create a plot showing chemistry for each cluster size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1108 +#: ../src/backend/filters/spatialAnalysis.cpp:1006 +#: ../src/backend/filters/profile.cpp:1111 +#: ../src/backend/filters/ionInfo.cpp:465 +msgid "Normalise" +msgstr "Normalise" + +#: ../src/backend/filters/clusterAnalysis.cpp:1111 +msgid "Convert cluster counts to composition" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1117 +msgid "Postprocess" +msgstr "Postprocess. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1136 +msgid "If selected, use as \"core\" ion type (can make clusters)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1141 +msgid "Core Ranges" +msgstr "Gammes de noyau. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1147 +msgid "Enable/Disable All" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1151 +msgid "Enable/disable all ions" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1164 +msgid "" +"If selected, use as \"bulk\" ion type (can be included in existing clusters)" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1169 +msgid "Bulk Ranges" +msgstr "Bulk Gammes. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1185 +msgid "Max. Sep + Erode" +msgstr "Max. Sep + Erosiona. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1938 +msgid " --------------------------- Parameter selection notice ------------- " +msgstr "" +" --------------------------- Avís de sélection du paramètre -------------. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1939 +msgid "You have specified a bulk distance larger than half your link distance." +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:1940 +msgid "" +"You can do this; thats OK, but the output is no longer independent of the " +"computational process;" +msgstr "" +"Peux faire ce; thats OK, mais la sortie est déjà n'indépendante du procès " +"computacional;. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1941 +msgid "" +"This will be a problem in the case where two or more clusters can equally " +"lay claim to a \"bulk\" ion. " +msgstr "" +"Ce sera un problème en le cas où deux ou plus les groupes également peuvent " +"mettre réclamation à un. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1942 +msgid "" +" If your inter-cluster distance is sufficiently large (larger than your bulk " +"linking distance), then you can get away with this." +msgstr "" +" Si votre inter-distance de groupe est suficientment grand (plus grand que " +"votre bulk raccordant distance), alors te peux escapar avec ce." + +#: ../src/backend/filters/clusterAnalysis.cpp:1943 +msgid "" +" In theory it is possible to \"join\" the clusters, but this has not been " +"implemented for speed reasons." +msgstr " En théorie est possible à implementat pour des raisons de vitesse." + +#: ../src/backend/filters/clusterAnalysis.cpp:1944 +msgid "" +"If you want this, please contact the author, or just use the source to add " +"this in yourself." +msgstr "" +"Si veux ce, si vous plau contactar l'auteur, ou seulement utiliser la source " +"pour ajouter cet en tu." + +#: ../src/backend/filters/clusterAnalysis.cpp:1945 +msgid "---------------------------------------------------------------------- " +msgstr "----------------------------------------------------------------------. " + +#: ../src/backend/filters/clusterAnalysis.cpp:1955 +#: ../src/backend/filters/spatialAnalysis.cpp:476 +#: ../src/backend/filters/spatialAnalysis.cpp:2166 +#: ../src/backend/filters/spatialAnalysis.cpp:2595 +#: ../src/backend/filters/spatialAnalysis.cpp:2887 +#: ../src/backend/filters/spatialAnalysis.cpp:3188 +#: ../src/backend/filters/spatialAnalysis.cpp:3334 +#: ../src/backend/filters/spatialAnalysis.cpp:3597 +#: ../src/backend/filters/spatialAnalysis.cpp:3810 +#: ../src/backend/filters/transform.cpp:1015 +msgid "Collate" +msgstr "Copies assemblées" + +#: ../src/backend/filters/clusterAnalysis.cpp:1974 +msgid "Build Core" +msgstr "Noyau de complexió. " + +#: ../src/backend/filters/clusterAnalysis.cpp:2002 +msgid "Core" +msgstr "Noyau" + +#: ../src/backend/filters/clusterAnalysis.cpp:2125 +msgid "Bulk" +msgstr "Bulk. " + +#: ../src/backend/filters/clusterAnalysis.cpp:2203 +msgid "Erode" +msgstr "Contracter" + +#: ../src/backend/filters/clusterAnalysis.cpp:2281 +msgid "Re-Collate" +msgstr "Re-Acarar. " + +#: ../src/backend/filters/clusterAnalysis.cpp:2336 +msgid "Classify Core" +msgstr "Classe Noyau. " + +#: ../src/backend/filters/clusterAnalysis.cpp:2427 +msgid "Build Bulk" +msgstr "Complexió Bulk. " + +#: ../src/backend/filters/clusterAnalysis.cpp:2675 +#: ../src/backend/filters/clusterAnalysis.cpp:2878 +msgid "Cluster Size" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:2676 +#: ../src/backend/filters/clusterAnalysis.cpp:2882 +msgid "Frequency" +msgstr "" + +#: ../src/backend/filters/clusterAnalysis.cpp:2880 +msgid "Composition" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:116 +msgid "None (Raw count)" +msgstr "Chef (Cru compter). " + +#: ../src/backend/filters/voxelise.cpp:117 +msgid "Volume (Density)" +msgstr "Volume (Densité). " + +#: ../src/backend/filters/voxelise.cpp:118 +msgid "All Ions (conc)" +msgstr "Tous les Ions (conc). " + +#: ../src/backend/filters/voxelise.cpp:119 +msgid "Ratio (Num/Denom)" +msgstr "Proportion (Num/Denom). " + +#: ../src/backend/filters/voxelise.cpp:123 +msgid "Point Cloud" +msgstr "Nuage de point. " + +#: ../src/backend/filters/voxelise.cpp:124 +msgid "Isosurface" +msgstr "Isosurface. " + +#: ../src/backend/filters/voxelise.cpp:125 +msgid "Axial slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:126 +msgid "Slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:131 +msgid "Gaussian (blur)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:132 +msgid "Lapl. of Gauss. (edges)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:137 +msgid "Linear" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:404 +msgid "Counting" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:579 +msgid "Gauss Smooth" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:585 +msgid "Calc. Laplace" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:609 +msgid "Voxel Limits (min,max): (" +msgstr "Voxel Limites (min,max): (. " + +#: ../src/backend/filters/voxelise.cpp:619 +#: ../src/backend/filters/voxelise.cpp:1139 +msgid "Representation" +msgstr "Représentation" + +#: ../src/backend/filters/voxelise.cpp:924 +msgid "Fixed width" +msgstr "Largeur de recouvrement" + +#: ../src/backend/filters/voxelise.cpp:928 +msgid "If true, use fixed size voxels, otherwise use fixed count" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:934 +msgid "Bin width x" +msgstr "Amplada de galleda x. " + +#: ../src/backend/filters/voxelise.cpp:938 +msgid "Voxel size in X direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:942 +msgid "Bin width y" +msgstr "Amplada de galleda y. " + +#: ../src/backend/filters/voxelise.cpp:945 +msgid "Voxel size in Y direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:951 +msgid "Bin width z" +msgstr "Amplada de galleda z. " + +#: ../src/backend/filters/voxelise.cpp:954 +msgid "Voxel size in Z direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:961 +msgid "Num bins x" +msgstr "Num Galledes x. " + +#: ../src/backend/filters/voxelise.cpp:965 +msgid "Number of voxels to use in X direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:970 +msgid "Num bins y" +msgstr "Num Galledes y. " + +#: ../src/backend/filters/voxelise.cpp:973 +msgid "Number of voxels to use in Y direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:979 +msgid "Num bins z" +msgstr "Num Galledes z. " + +#: ../src/backend/filters/voxelise.cpp:981 +msgid "Number of voxels to use in Z direction" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1011 +msgid "Normalise by" +msgstr "Normalise Pour. " + +#: ../src/backend/filters/voxelise.cpp:1014 +msgid "Method to use to normalise scalar value in each voxel" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1017 +msgid "Computation" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1024 +#: ../src/backend/filters/spatialAnalysis.cpp:1122 +#: ../src/backend/filters/spatialAnalysis.cpp:1143 +msgid "Numerator" +msgstr "Numérateur" + +#: ../src/backend/filters/voxelise.cpp:1027 +msgid "Parmeter \"a\" used in fraction (a/b) to get voxel value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1044 +msgid "Enable this ion for numerator" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1056 +#: ../src/backend/filters/voxelise.cpp:1077 +#: ../src/backend/filters/spatialAnalysis.cpp:1150 +#: ../src/backend/filters/spatialAnalysis.cpp:1169 +msgid "Denominator" +msgstr "Dénominateur" + +#: ../src/backend/filters/voxelise.cpp:1059 +msgid "Parameter \"b\" used in fraction (a/b) to get voxel value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1073 +msgid "Enable this ion for denominator contribution" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1095 +#: ../src/backend/filters/voxelise.cpp:1126 +msgid "Filtering" +msgstr "Filtrage" + +#: ../src/backend/filters/voxelise.cpp:1099 +msgid "Smoothing method to use on voxels" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1102 +msgid "Processing" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1108 +msgid "Standard Dev" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1112 +msgid "Filtering Scale" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1118 +msgid "Kernel Size" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1122 +msgid "" +"Filter radius, in multiples of std. dev. Larger -> slower, more accurate" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1142 +msgid "3D display method" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1153 +msgid "Spot size" +msgstr "Mida de tache. " + +#: ../src/backend/filters/voxelise.cpp:1156 +msgid "Size of the spots to use for display" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1161 +#: ../src/backend/filters/voxelise.cpp:1196 +#: ../src/backend/filters/voxelise.cpp:1268 +#: ../src/backend/filters/voxelise.cpp:1358 +msgid "Transparency" +msgstr "Transparence" + +#: ../src/backend/filters/voxelise.cpp:1164 +msgid "How \"see through\" each point is (0 - opaque, 1 - invisible)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1173 +msgid "Surf. param." +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1176 +msgid "Isovalue" +msgstr "Isovalue. " + +#: ../src/backend/filters/voxelise.cpp:1179 +msgid "Scalar value to show as isosurface" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1184 +#: ../src/backend/filters/voxelise.cpp:1249 +#: ../src/backend/filters/voxelise.cpp:1338 +#: ../src/backend/filters/spatialAnalysis.cpp:2212 +#: ../src/backend/filters/spatialAnalysis.cpp:2265 +msgid "Surface" +msgstr "Surface" + +#: ../src/backend/filters/voxelise.cpp:1191 +msgid "Colour of isosurface" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1199 +#: ../src/backend/filters/voxelise.cpp:1271 +#: ../src/backend/filters/voxelise.cpp:1361 +msgid "How \"see through\" each facet is (0 - opaque, 1 - invisible)" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1210 +#: ../src/backend/filters/voxelise.cpp:1317 +msgid "Slice param." +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1218 +msgid "Slice Axis" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1221 +msgid "Normal for the planar slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1228 +msgid "Slice Coord" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1231 +msgid "Fractional coordinate that slice plane passes through" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1236 +msgid "Interp. Mode" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1244 +msgid "Interpolation mode for direction normal to slice" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1260 +#: ../src/backend/filters/voxelise.cpp:1350 +msgid "Colour mode" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1263 +#: ../src/backend/filters/voxelise.cpp:1353 +#: ../src/backend/filters/ionColour.cpp:293 +msgid "Colour scheme used to assign points colours by value" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1276 +#: ../src/backend/filters/voxelise.cpp:1366 +#: ../src/backend/filters/ionColour.cpp:305 +msgid "Show Bar" +msgstr "Bar de spectacle. " + +#: ../src/backend/filters/voxelise.cpp:1279 +msgid "Display colour bar in 3D view?" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1284 +#: ../src/backend/filters/voxelise.cpp:1373 +msgid "Auto Bounds" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1285 +#: ../src/backend/filters/voxelise.cpp:1374 +msgid "Auto-compute min/max values in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1295 +#: ../src/backend/filters/voxelise.cpp:1384 +#: ../src/backend/filters/ionColour.cpp:337 +msgid "Map start" +msgstr "Début de carte. " + +#: ../src/backend/filters/voxelise.cpp:1296 +#: ../src/backend/filters/voxelise.cpp:1385 +#: ../src/backend/filters/ionColour.cpp:338 +msgid "Assign points with this value to the first colour in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1303 +#: ../src/backend/filters/voxelise.cpp:1392 +#: ../src/backend/filters/ionColour.cpp:345 +msgid "Map end" +msgstr "Fin de carte. " + +#: ../src/backend/filters/voxelise.cpp:1304 +#: ../src/backend/filters/voxelise.cpp:1393 +#: ../src/backend/filters/ionColour.cpp:346 +msgid "Assign points with this value to the last colour in map" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1320 +msgid "Slice Offset" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1323 +msgid "Point on plane for slice, in 0->1 coordinates" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1330 +msgid "Slice Normal" +msgstr "" + +#: ../src/backend/filters/voxelise.cpp:1333 +msgid "Normal vector for slice" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:289 +msgid "Colour Map" +msgstr "Carte de couleur. " + +#: ../src/backend/filters/ionColour.cpp:297 +msgid "Reverse map" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:298 +msgid "Reverse the colour scale" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:306 +msgid "Display the colour legend in the 3D view" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:312 +msgid "Opacity" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:313 +msgid "How see-through to make the legend (0- transparent, 1- solid)" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:320 +msgid "Num Colours" +msgstr "Num Couleurs. " + +#: ../src/backend/filters/ionColour.cpp:322 +msgid "Number of unique colours to use in colour map" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:327 +msgid "Auto bounds" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:329 +msgid "Automatically scale colour to min/max of data range" +msgstr "" + +#: ../src/backend/filters/ionColour.cpp:460 ../src/backend/filter.cpp:197 +msgid "Aborted" +msgstr "Interrompu" + +#: ../src/backend/filters/spatialAnalysis.cpp:123 +msgid "Local Density" +msgstr "Densité locale. " + +#: ../src/backend/filters/spatialAnalysis.cpp:124 +msgid "Density Filtering" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:125 +msgid "Radial Distribution" +msgstr "Distribution radial. " + +#: ../src/backend/filters/spatialAnalysis.cpp:126 +msgid "Axial Distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:127 +msgid "Binomial Distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:128 +msgid "Point Em/Replacement" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:129 +msgid "Local Chemistry" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:133 +msgid "Neighbour Count" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:484 +msgid "Load" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:539 +#: ../src/backend/filters/spatialAnalysis.cpp:2198 +#: ../src/backend/filters/spatialAnalysis.cpp:2251 +#: ../src/backend/filters/spatialAnalysis.cpp:2601 +#: ../src/backend/filters/spatialAnalysis.cpp:2893 +#: ../src/backend/filters/spatialAnalysis.cpp:3200 +#: ../src/backend/filters/spatialAnalysis.cpp:3829 +msgid "Build" +msgstr "Construction" + +#: ../src/backend/filters/spatialAnalysis.cpp:588 +#: ../src/backend/filters/spatialAnalysis.cpp:3222 +#: ../src/backend/filters/spatialAnalysis.cpp:3718 +#: ../src/backend/filters/spatialAnalysis.cpp:3846 +msgid "Compute" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:710 +msgid "Spatial analysis algorithm to use" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:734 +#: ../src/backend/filters/spatialAnalysis.cpp:785 +msgid "Stop Mode" +msgstr "Mode de chômeuse. " + +#: ../src/backend/filters/spatialAnalysis.cpp:737 +msgid "Method to use to terminate algorithm when examining each point" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:744 +msgid "NN Max" +msgstr "NN Max. " + +#: ../src/backend/filters/spatialAnalysis.cpp:747 +msgid "Maximum number of neighbours to examine" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:754 +msgid "Normalise bins" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:757 +msgid "" +"Normalise counts by binwidth. Needed when comparing NN histograms against " +"one another" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:763 +msgid "Show Random" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:766 +msgid "Show a fitted (density matched) theoretical distribution" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:777 +msgid "Dist Max" +msgstr "Dist Max. " + +#: ../src/backend/filters/spatialAnalysis.cpp:780 +msgid "Maximum distance from each point for search" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:794 +#: ../src/backend/filters/spatialAnalysis.cpp:928 +#: ../src/backend/filters/profile.cpp:1089 +msgid "Num Bins" +msgstr "Num Galledes. " + +#: ../src/backend/filters/spatialAnalysis.cpp:797 +#: ../src/backend/filters/spatialAnalysis.cpp:931 +msgid "Number of bins for output 1D RDF plot" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:803 +msgid "Surface Remove" +msgstr "La Surface Enlève. " + +#: ../src/backend/filters/spatialAnalysis.cpp:806 +msgid "" +"Exclude surface as part of source to minimise bias in RDF (at cost of " +"increased noise)" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:813 +msgid "Remove Dist" +msgstr "Enlève Dist. " + +#: ../src/backend/filters/spatialAnalysis.cpp:816 +msgid "Minimum distance to remove from surface" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:824 +#: ../src/backend/filters/spatialAnalysis.cpp:936 +msgid "Plot colour " +msgstr "Couleur de trama. " + +#: ../src/backend/filters/spatialAnalysis.cpp:827 +#: ../src/backend/filters/spatialAnalysis.cpp:939 +msgid "Colour of output plot" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:831 +#: ../src/backend/filters/spatialAnalysis.cpp:917 +#: ../src/backend/filters/spatialAnalysis.cpp:922 +#: ../src/backend/filters/spatialAnalysis.cpp:954 +#: ../src/backend/filters/spatialAnalysis.cpp:993 +msgid "Alg. Params." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:844 +#: ../src/backend/filters/spatialAnalysis.cpp:1096 +msgid "Source" +msgstr "Source" + +#: ../src/backend/filters/spatialAnalysis.cpp:847 +msgid "Ions to use for initiating RDF search" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:860 +#: ../src/backend/filters/spatialAnalysis.cpp:1112 +#: ../src/backend/filters/spatialAnalysis.cpp:1138 +msgid "Enable/disable ion as source" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:865 +#: ../src/backend/filters/spatialAnalysis.cpp:1117 +msgid "Source Ion" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:875 +#: ../src/backend/filters/spatialAnalysis.cpp:1153 +msgid "Enable/disable all ions as target" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:887 +#: ../src/backend/filters/spatialAnalysis.cpp:1165 +msgid "Enable/disable this ion as target" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:891 +msgid "Target Ion" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:901 +msgid "Cutoff" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:904 +msgid "Remove points with local density above/below this value" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:910 +msgid "Retain Upper" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:913 +msgid "Retain either points with density above (enabled) or below cutoff" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:950 +msgid "Vector along which to calculate distribution function" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:961 +msgid "Block size" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:964 +msgid "Number of ions to use per block" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:971 +msgid "Max Block Aspect" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:974 +msgid "" +"Maximum allowable block aspect ratio. Blocks above this aspect are " +"discarded. Setting too high decreases correlation strength. Too low causes " +"loss of statistical power." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:985 +msgid "Extrusion Direction" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:988 +msgid "Direction in which blocks are extended during construction." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:997 +msgid "Plot Counts" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1000 +msgid "Show the counts in the binomial histogram" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1009 +msgid "" +"Normalise the counts in the binomial histogram to a probability density " +"function" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1013 +msgid "Expected Freq" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1016 +msgid "" +"Show the theoretically expected probability density function for a random " +"dataset with the same mean" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1024 +msgid "Display Grid" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1027 +msgid "Show the extruded grid in the 3D view. This may be slow" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1031 +msgid "View Options" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1037 +msgid "Data File" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1041 +msgid "Pos file of points to subtract/replace/etc" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1046 +msgid "Match Tol." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1049 +msgid "Tolerance to allow for matching" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1065 +msgid "Replacment condition" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1071 +msgid "Replace value" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1074 +msgid "Use value data from file when replacing ions" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1079 +msgid "Replacement" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1099 +msgid "Enable/disable all ions as source" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1125 +msgid "Ions to use as Numerator for conc. calculation" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1681 +msgid "Spatial analysis aborted by user" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1682 +msgid "Insufficient memory for binomial. Reduce input size?" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1683 +msgid "Required range data not present" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1684 +msgid "Unable to generate usable binomial grid" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1686 +msgid "Insufficient points to continue" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:1687 +msgid "Unable to load file" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:2305 +#: ../src/backend/filters/spatialAnalysis.cpp:2624 +#: ../src/backend/filters/spatialAnalysis.cpp:2917 +msgid "Analyse" +msgstr "Analyse. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2384 +#: ../src/backend/filters/spatialAnalysis.cpp:2474 +#: ../src/backend/filters/spatialAnalysis.cpp:2540 +msgid "Radial Distance" +msgstr "Distance radial. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2386 +#: ../src/backend/filters/spatialAnalysis.cpp:2479 +msgid "Count/Distance" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:2391 +#: ../src/backend/filters/spatialAnalysis.cpp:2484 +msgid "NN Freq." +msgstr "NN Freq." + +#: ../src/backend/filters/spatialAnalysis.cpp:2531 +msgid "Warning, " +msgstr "Avís,. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2532 +msgid "" +" points were unable to find neighbour points that exceeded the search " +"radius, and thus terminated prematurely" +msgstr "" +" Les Points étaient incapaços de trouver des points de voisin qu'ont " +"surpassé la recerca radius, et pour ce terminated prematurely. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2542 +msgid " RDF" +msgstr " RDF. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2823 +#: ../src/backend/filters/spatialAnalysis.cpp:3123 +msgid "Number Density (\\#/Vol^3)" +msgstr "Densité de numéro (\\#/Veut^3). " + +#: ../src/backend/filters/spatialAnalysis.cpp:2848 +#: ../src/backend/filters/spatialAnalysis.cpp:3145 +msgid "Warning," +msgstr "Avís,. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2849 +#: ../src/backend/filters/spatialAnalysis.cpp:3146 +msgid " points were un-analysable. These have been dropped" +msgstr " Les Points étaient un-analysable. Ceux-ci ont été laissés tomber. " + +#: ../src/backend/filters/spatialAnalysis.cpp:2871 +#: ../src/backend/filters/spatialAnalysis.cpp:3168 +msgid "And so on..." +msgstr "Etcètera..." + +#: ../src/backend/filters/spatialAnalysis.cpp:3268 +msgid "Insufficient points to complete analysis" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3291 +msgid "Axial Distance" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3293 +msgid " 1D Dist. Func." +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3344 +msgid "Binomial" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3477 +#: ../src/backend/filters/spatialAnalysis.cpp:3542 +msgid "Ions in Block" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3479 +#: ../src/backend/filters/spatialAnalysis.cpp:3544 +#: ../src/backend/filters/spectrumPlot.cpp:79 +msgid "Probability" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3546 +msgid "Count (blocks)" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3611 +msgid "Build Numerator" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3625 +msgid "Build Denominator" +msgstr "" + +#: ../src/backend/filters/spatialAnalysis.cpp:3961 +msgid "Relative Conc. (%)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:51 +msgid "Cylinder (axial)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:52 +msgid "Cylinder (radial)" +msgstr "" + +#: ../src/backend/filters/profile.cpp:595 +msgid "Distance" +msgstr "Distance" + +#: ../src/backend/filters/profile.cpp:603 +msgid "Fraction" +msgstr "Fraction" + +#: ../src/backend/filters/profile.cpp:605 +msgid "Density (\\frac{\\#}{len^3})" +msgstr "" + +#: ../src/backend/filters/profile.cpp:632 +msgid "Freq. Profile" +msgstr "Freq. Profil. " + +#: ../src/backend/filters/profile.cpp:684 +msgid "No data remained in profile - cannot display result" +msgstr "" + +#: ../src/backend/filters/profile.cpp:971 +msgid "Total Density" +msgstr "" + +#: ../src/backend/filters/profile.cpp:975 +msgid "Do not do per-species analysis, perform density computation only" +msgstr "" + +#: ../src/backend/filters/profile.cpp:989 +msgid "Primitive type" +msgstr "" + +#: ../src/backend/filters/profile.cpp:993 +msgid "Basic shape to use for profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1005 +msgid "Display the 3D composition profile interaction object" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1020 +msgid "Position for centre of cylinder" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1028 +msgid "Vector between ends of cylinder" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1036 +msgid "Prevent length of cylinder changing during interaction" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1079 +msgid "Fixed Bin Num" +msgstr "Galleda fixe Num. " + +#: ../src/backend/filters/profile.cpp:1082 +msgid "" +"If true, use a fixed number of bins for profile, otherwise use fixed step " +"size" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1094 +msgid "Number of bins to use for profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1100 +#: ../src/backend/filters/spectrumPlot.cpp:583 +msgid "Bin width" +msgstr "Amplada de galleda. " + +#: ../src/backend/filters/profile.cpp:1106 +msgid "Size of each bin in profile" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1115 +msgid "Convert bin counts into relative frequencies in each bin" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1119 +msgid "Min. events" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1123 +msgid "Drop data that does not have this many events" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1126 +msgid "Settings" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1148 +#: ../src/backend/filters/spectrumPlot.cpp:672 +msgid "Plot Type" +msgstr "Type de graphique" + +#: ../src/backend/filters/profile.cpp:1151 +msgid "Visual style for plot" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1162 +msgid "Colour of plot" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1178 +msgid "Err. Estimator" +msgstr "Err. Estimador. " + +#: ../src/backend/filters/profile.cpp:1181 +msgid "Method of estimating error associated with each bin" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1188 +msgid "Avg. Window" +msgstr "Avg. Fenêtre. " + +#: ../src/backend/filters/profile.cpp:1191 +msgid "Number of bins to include in moving average filter" +msgstr "" + +#: ../src/backend/filters/profile.cpp:1195 +msgid "Error analysis" +msgstr "" + +#: ../src/backend/filters/transform.cpp:84 +msgid "Translate" +msgstr "Translater" + +#: ../src/backend/filters/transform.cpp:85 +msgid "Scale (isotropic)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:86 +msgid "Scale (anisotropic)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:87 +msgid "Rotate" +msgstr "Rotation" + +#: ../src/backend/filters/transform.cpp:88 +msgid "Value Shuffle" +msgstr "Valeur Shuffle. " + +#: ../src/backend/filters/transform.cpp:89 +msgid "Spatial Noise" +msgstr "Bruit espacial. " + +#: ../src/backend/filters/transform.cpp:90 +msgid "Translate Value" +msgstr "Traduit Valeur. " + +#: ../src/backend/filters/transform.cpp:91 +msgid "Crop Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:95 +msgid "Specify" +msgstr "Especifica. " + +#: ../src/backend/filters/transform.cpp:96 +msgid "Boundbox Centre" +msgstr "Boundbox Centre. " + +#: ../src/backend/filters/transform.cpp:97 +msgid "Mass Centre" +msgstr "Centre de masse. " + +#: ../src/backend/filters/transform.cpp:1080 +msgid "Shuffle" +msgstr "Mélanger" + +#: ../src/backend/filters/transform.cpp:1104 +msgid "Splice" +msgstr "Collant" + +#: ../src/backend/filters/transform.cpp:1152 +msgid "Algorithm to use to transform point data" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1169 +msgid "Origin mode" +msgstr "Mode d'origine. " + +#: ../src/backend/filters/transform.cpp:1172 +msgid "Select how transform origin is computed" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1177 +msgid "Show marker" +msgstr "Spectacle marker. " + +#: ../src/backend/filters/transform.cpp:1181 +msgid "Display an interactive object to set transform origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1183 +msgid "Display a small marker to denote transform origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1199 +msgid "Translation" +msgstr "Translation" + +#: ../src/backend/filters/transform.cpp:1202 +msgid "Translation vector for transform" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1214 +msgid "Offset" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1218 +msgid "Scalar to use to offset each point's associated value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1235 +#: ../src/backend/filters/transform.cpp:1262 +msgid "Origin of scale transform" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1242 +#: ../src/backend/filters/transform.cpp:1269 +msgid "Scale Fact." +msgstr "Fait d'échelle." + +#: ../src/backend/filters/transform.cpp:1245 +#: ../src/backend/filters/transform.cpp:1272 +msgid "Enlargement factor for scaling around origin" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1288 +msgid "Origin of rotation" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1296 +msgid "Axis around which to revolve" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1301 +msgid "Angle (deg)" +msgstr "Angle (deg). " + +#: ../src/backend/filters/transform.cpp:1304 +msgid "Angle to perform rotation (ACW, as viewed from axis towards origin)" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1321 +msgid "Noise Type" +msgstr "Type de bruit" + +#: ../src/backend/filters/transform.cpp:1324 +msgid "Method to use to degrade point data" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1331 +msgid "Noise level" +msgstr "Niveau de bruit. " + +#: ../src/backend/filters/transform.cpp:1333 +msgid "Standard dev." +msgstr "Standard dev." + +#: ../src/backend/filters/transform.cpp:1341 +msgid "Amplitude of noise" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1355 +msgid "Min Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1359 +msgid "Minimum value to use for crop" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1363 +msgid "Max Value" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1367 +msgid "Maximum value to use for crop" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1376 +msgid "Transform Params" +msgstr "Transforme Params. " + +#: ../src/backend/filters/transform.cpp:1745 +msgid "White" +msgstr "" + +#: ../src/backend/filters/transform.cpp:1747 +msgid "Gaussian" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:64 +msgid "Box only" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:65 +msgid "Tick" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:66 +msgid "Dimension" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:572 +msgid "If true, show box, otherwise hide box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:585 +msgid "Style" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:588 +msgid "Box display mode" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:591 +msgid "Display mode" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:600 +msgid "Fixed Tick Num" +msgstr "Tic-tac fix Num. " + +#: ../src/backend/filters/boundingBox.cpp:604 +msgid "" +"If true, evenly use specified number of ticks. Otherwise, use distance to " +"determine tick count" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:612 +msgid "Num X" +msgstr "Num Xème. " + +#: ../src/backend/filters/boundingBox.cpp:615 +msgid "Tick count in X direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:620 +msgid "Num Y" +msgstr "Num Y. " + +#: ../src/backend/filters/boundingBox.cpp:623 +msgid "Tick count in Y direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:628 +msgid "Num Z" +msgstr "Num Z. " + +#: ../src/backend/filters/boundingBox.cpp:631 +msgid "Tick count in Z direction" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:637 +msgid "Spacing X" +msgstr "Espacé Xème. " + +#: ../src/backend/filters/boundingBox.cpp:641 +msgid "Distance between ticks on X axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:645 +msgid "Spacing Y" +msgstr "Espacé Y. " + +#: ../src/backend/filters/boundingBox.cpp:649 +msgid "Distance between ticks on Y axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:653 +msgid "Spacing Z" +msgstr "Espacé Z. " + +#: ../src/backend/filters/boundingBox.cpp:657 +msgid "Distance between ticks on Z axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:665 +msgid "Ticks X" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:669 +msgid "Display tick marks on X axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:673 +msgid "Ticks Y" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:677 +msgid "Display tick marks on Y axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:681 +msgid "Ticks Z" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:685 +msgid "Display tick marks on Z axis" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:688 +msgid "Tick marks" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:695 +msgid "Box Colour" +msgstr "Couleur de caisse. " + +#: ../src/backend/filters/boundingBox.cpp:699 +msgid "Colour of the bounding box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:704 +msgid "Line thickness" +msgstr "Gruix de ligne. " + +#: ../src/backend/filters/boundingBox.cpp:708 +msgid "Thickness of the lines used to draw the box" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:716 +#: ../src/backend/filters/annotation.cpp:856 +msgid "Font Size" +msgstr "Taille de fonte" + +#: ../src/backend/filters/boundingBox.cpp:719 +msgid "Relative size for text" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:724 +msgid "Abs. Coords" +msgstr "" + +#: ../src/backend/filters/boundingBox.cpp:727 +msgid "Show labels using aboslute coo-ordinates" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:73 +msgid "Arrow" +msgstr "Flèche" + +#: ../src/backend/filters/annotation.cpp:74 +msgid "Text" +msgstr "Texte" + +#: ../src/backend/filters/annotation.cpp:75 +msgid "Arrow+Text" +msgstr "Texte+de flèche. " + +#: ../src/backend/filters/annotation.cpp:76 +msgid "Angle" +msgstr "Angle" + +#: ../src/backend/filters/annotation.cpp:77 +msgid "Ruler" +msgstr "Règle" + +#: ../src/backend/filters/annotation.cpp:177 ../src/backend/filter.cpp:55 +msgid "Draw" +msgstr "Nul" + +#: ../src/backend/filters/annotation.cpp:532 +msgid "Enable" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:535 +msgid "Enable/disable annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:556 +msgid "Type or style of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:572 +#: ../src/backend/filters/annotation.cpp:676 +msgid "Text of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:580 +msgid "Position of annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:584 +#: ../src/backend/filters/annotation.cpp:691 +#: ../src/backend/filters/annotation.cpp:750 +#: ../src/backend/filters/annotation.cpp:839 +msgid "Up dir" +msgstr "Chef amunt de dire. " + +#: ../src/backend/filters/annotation.cpp:588 +#: ../src/backend/filters/annotation.cpp:843 +msgid "Vector for up direction of annotation text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:592 +#: ../src/backend/filters/annotation.cpp:698 +#: ../src/backend/filters/annotation.cpp:742 +#: ../src/backend/filters/annotation.cpp:847 +msgid "Across dir" +msgstr "à travers dire. " + +#: ../src/backend/filters/annotation.cpp:596 +#: ../src/backend/filters/annotation.cpp:851 +msgid "Reading direction for annotation" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:601 +#: ../src/backend/filters/annotation.cpp:683 +#: ../src/backend/filters/annotation.cpp:777 +msgid "Text size" +msgstr "Taille texte" + +#: ../src/backend/filters/annotation.cpp:605 +#: ../src/backend/filters/annotation.cpp:687 +#: ../src/backend/filters/annotation.cpp:859 +msgid "Relative size of annotation text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:617 +#: ../src/backend/filters/annotation.cpp:658 +msgid "3D position for tail of arrow" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:625 +#: ../src/backend/filters/annotation.cpp:667 +msgid "3D Position to which arrow points" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:628 +#: ../src/backend/filters/annotation.cpp:738 +msgid "Positioning" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:633 +#: ../src/backend/filters/annotation.cpp:705 +msgid "Tip radius" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:637 +msgid "Size of the arrow head" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:641 +msgid "Line size" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:645 +msgid "Thickness of line used to draw arrow stem" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:679 +msgid "Options" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:715 +msgid "Position A" +msgstr "Position Un. " + +#: ../src/backend/filters/annotation.cpp:719 +msgid "Location of first non-central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:723 +msgid "Origin " +msgstr "Origine" + +#: ../src/backend/filters/annotation.cpp:727 +msgid "Location of central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:731 +msgid "Position B" +msgstr "Position B. " + +#: ../src/backend/filters/annotation.cpp:735 +msgid "Location of second non-central vertex" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:746 +msgid "Reading direction for angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:751 +msgid "Vector for up direction of angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:759 +msgid "Reflexive" +msgstr "Reflexive. " + +#: ../src/backend/filters/annotation.cpp:762 +msgid "Measure interor (enabled) or exterior angle (disabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:767 +msgid "Show Angle" +msgstr "Angle de spectacle. " + +#: ../src/backend/filters/annotation.cpp:771 +msgid "Display angle text (when enabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:781 +msgid "Size of angle text" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:799 +msgid "Digit format" +msgstr "Format de dígit. " + +#: ../src/backend/filters/annotation.cpp:803 +msgid "" +"Format of angle text; # for numeral position, '.' for separator, eg ##.## " +"gives 12.34" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:809 +#: ../src/backend/filters/annotation.cpp:894 +msgid "Sphere size" +msgstr "Sphere Mida. " + +#: ../src/backend/filters/annotation.cpp:813 +#: ../src/backend/filters/annotation.cpp:898 +msgid "Marker sphere size for manipulating tool" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:827 +msgid "Ruler beginning 3D location" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:835 +msgid "Ruler finish 3D location" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:865 +msgid "Fixed ticks" +msgstr "Tic-tacs fixos. " + +#: ../src/backend/filters/annotation.cpp:868 +msgid "" +"Use fixed (enabled) number of text markers, or one every fixed distance " +"(disabled)" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:875 +msgid "Num Ticks" +msgstr "Num Tic-tacs. " + +#: ../src/backend/filters/annotation.cpp:878 +msgid "Number of tick marks along ruler" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:885 +msgid "Tick Spacing" +msgstr "Espacé de tic-tac. " + +#: ../src/backend/filters/annotation.cpp:888 +msgid "Distance between tick marks along ruler" +msgstr "" + +#: ../src/backend/filters/annotation.cpp:912 +msgid "Colour for ruler and ticks" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:192 +msgid "Sampling" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:448 +msgid "By Count" +msgstr "Pour Compter. " + +#: ../src/backend/filters/ionDownsample.cpp:451 +msgid "Sample up to a fixed number of ions" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:457 +msgid "Per Species" +msgstr "Pour Espèce. " + +#: ../src/backend/filters/ionDownsample.cpp:461 +msgid "Use species specific (from ranging) sampling values" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:491 +msgid "Sampling value for species" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:498 +#: ../src/backend/filters/ionInfo.cpp:317 +msgid "Unranged" +msgstr "Unranged. " + +#: ../src/backend/filters/ionDownsample.cpp:507 +#: ../src/backend/filters/ionDownsample.cpp:531 +msgid "Sampling rates" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:515 +msgid "Output Count" +msgstr "La Sortie Compte. " + +#: ../src/backend/filters/ionDownsample.cpp:518 +msgid "Sample up to this value of points" +msgstr "" + +#: ../src/backend/filters/ionDownsample.cpp:523 +msgid "Out Fraction" +msgstr "Hors Fracció. " + +#: ../src/backend/filters/ionDownsample.cpp:527 +msgid "Sample this fraction of points" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:37 +msgid "Rectilinear" +msgstr "Rectilinéaire" + +#: ../src/backend/filters/ionInfo.cpp:38 +msgid "Convex hull" +msgstr "Convex hull. " + +#: ../src/backend/filters/ionInfo.cpp:200 +msgid "No ions" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:226 +#: ../src/backend/filters/spectrumPlot.cpp:433 +msgid "" +"Background fit failed - input data was considered ill formed (gauss-test)" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:227 +msgid "Following data has not been corrected" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:279 +msgid "--Counts--" +msgstr "--Compte--. " + +#: ../src/backend/filters/ionInfo.cpp:289 +msgid "Total Ranged\t" +msgstr "Le Total a Varié. \t" + +#: ../src/backend/filters/ionInfo.cpp:294 +msgid "Total (incl. unranged)\t" +msgstr "Total (incl. unranged). \t" + +#: ../src/backend/filters/ionInfo.cpp:307 +msgid "n/a" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:330 +msgid "Number of points : " +msgstr "Numéro de points :. " + +#: ../src/backend/filters/ionInfo.cpp:359 +msgid "Rectilinear Bounds : " +msgstr "Rectiligne Saute :. " + +#: ../src/backend/filters/ionInfo.cpp:364 +msgid "Volume (len^3): " +msgstr "Volume (len^3):. " + +#: ../src/backend/filters/ionInfo.cpp:381 +msgid "Convex Volume (len^3): " +msgstr "Convex Volume (len^3):. " + +#: ../src/backend/filters/ionInfo.cpp:384 +msgid "Unable to compute volume" +msgstr "Incapaç de computar volume. " + +#: ../src/backend/filters/ionInfo.cpp:413 +msgid "Ranged Density (pts/vol):" +msgstr "Densité variée (pts/veut):. " + +#: ../src/backend/filters/ionInfo.cpp:418 +msgid "Total Density (pts/vol):" +msgstr "Densité totale (pts/veut):. " + +#: ../src/backend/filters/ionInfo.cpp:448 +msgid "Compositions" +msgstr "Compositions. " + +#: ../src/backend/filters/ionInfo.cpp:449 +msgid "Display compositional data for points in console" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:453 +msgid "Counts" +msgstr "Compte. " + +#: ../src/backend/filters/ionInfo.cpp:454 +msgid "Display count data for points in console" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:461 +msgid "Ion data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:469 +msgid "Normalise count data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:533 +msgid "Volume" +msgstr "Volume" + +#: ../src/backend/filters/ionInfo.cpp:536 +msgid "Compute volume for point data" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:552 +msgid "Select volume counting technique" +msgstr "" + +#: ../src/backend/filters/ionInfo.cpp:565 +msgid "Volume data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:64 +msgid "Auto" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:65 +msgid "Little" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:66 +msgid "Big" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:69 +msgid "POS Data" +msgstr "POS Donnée. " + +#: ../src/backend/filters/dataLoad.cpp:70 +msgid "Text Data" +msgstr "Donnée de texte. " + +#: ../src/backend/filters/dataLoad.cpp:71 +msgid "ATO Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:72 +msgid "Tapsim Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:73 +msgid "3Dap/Posap OPS Data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:266 +msgid " does not exist" +msgstr " N'existe pas. " + +#: ../src/backend/filters/dataLoad.cpp:293 +msgid "Reading File" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:308 +#: ../src/backend/filters/dataLoad.cpp:321 +#: ../src/backend/filters/dataLoad.cpp:365 +#: ../src/backend/filters/dataLoad.cpp:376 +#: ../src/backend/filters/dataLoad.cpp:436 +#: ../src/backend/filters/dataLoad.cpp:458 +#: ../src/backend/filters/dataLoad.cpp:476 +msgid "Error loading file: " +msgstr "Erreur lors du chargement du fichier :" + +#: ../src/backend/filters/dataLoad.cpp:338 +msgid "Sampling is active, loaded " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:339 +msgid " available." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:347 +msgid "Loaded entire dataset, " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:347 +#: ../src/backend/filters/dataLoad.cpp:446 +#: ../src/backend/filters/dataLoad.cpp:468 +#: ../src/backend/filters/dataLoad.cpp:486 +msgid " points." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:391 +msgid "" +"Data file contained incorrect number of columns -- should be 3 or 4, was " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:445 +#: ../src/backend/filters/dataLoad.cpp:467 +#: ../src/backend/filters/dataLoad.cpp:485 +msgid "Loaded dataset, " +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:517 +msgid "" +"Warning:One or more bounds of the loaded data approaches the limits of " +"numerical stability for the internal data type(magnitude too large). " +"Consider rescaling data before loading" +msgstr "" +"Avís:Un ou plus saute de la donnée chargée s'acosta les limites de numérique " +"stability pour le type de donnée interne(magnitud trop grande). Il envisage " +"rescaling donnée avant de charger. " + +#: ../src/backend/filters/dataLoad.cpp:541 +#: ../src/backend/filters/dataLoad.cpp:562 +#: ../src/backend/filters/rangeFile.cpp:561 +#: ../src/backend/filters/rangeFile.cpp:581 +msgid "File" +msgstr "Fichier" + +#: ../src/backend/filters/dataLoad.cpp:542 +msgid "File from which to load data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:545 +msgid "" +"Readable files (*.xml, *.pos, *.txt,*.csv, *.ato, *.ops)|*.xml;*.pos;*.txt;*." +"csv;*.ato;*.ops|All Files|*" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:555 +msgid "File type" +msgstr "Type de fichier" + +#: ../src/backend/filters/dataLoad.cpp:557 +msgid "Type of file to be loaded" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:572 +msgid "Entries per point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:573 +msgid "Number of decimal values in file per 3D point (normally 4)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:590 +msgid "Relative offset of each entry in file for point's X position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:598 +msgid "Relative offset of each entry in file for point's Y position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:606 +msgid "Relative offset of each entry in file for point's Z position" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:614 +msgid "" +"Relative offset of each entry in file to use for scalar value of 3D point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:630 +msgid "File \"Endianness\"" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:631 +msgid "On-disk data storage format. If file won't load, just try each" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:643 +msgid "Recon. Width" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:644 +msgid "" +"Width of box onto which to place reconstructed detector hits (similar to tip " +"radius)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:653 +msgid "Ion Volume" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:654 +msgid "Effective volume of an ion (incl. free packing volume)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:662 +msgid "Det. Efficiency" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:663 +msgid "" +"Effiency of system (ions evaporated towards detector/ions detected by " +"detector)" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:677 +msgid "Value Label" +msgstr "Etiqueta de valeur. " + +#: ../src/backend/filters/dataLoad.cpp:681 +msgid "Name for the scalar value associated with each point" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:684 +msgid "Format params." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:690 +msgid "Enabled" +msgstr "Activé" + +#: ../src/backend/filters/dataLoad.cpp:694 +msgid "Load this file?" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:705 +msgid "Sample data" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:708 +msgid "" +"Perform random selection on file contents, instead of loading entire file" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:715 +msgid "Load Limit (MB)" +msgstr "Limite de charge (MB). " + +#: ../src/backend/filters/dataLoad.cpp:718 +msgid "Limit for size of data to load" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:725 +msgid "Monitor" +msgstr "Moniteur" + +#: ../src/backend/filters/dataLoad.cpp:729 +msgid "" +"Watch file timestamp to track changes to file contents from other programs" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:733 +msgid "Load params." +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:740 +msgid "Default colour " +msgstr "Default Couleur. " + +#: ../src/backend/filters/dataLoad.cpp:743 +msgid "Default colour for points, if not overridden by other filters" +msgstr "" + +#: ../src/backend/filters/dataLoad.cpp:748 +msgid "Draw Size" +msgstr "Mida de sorteig. " + +#: ../src/backend/filters/dataLoad.cpp:751 +msgid "Default size for points, if not overridden by other filters" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:77 +msgid "Maximum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:78 +msgid "Max in limit" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:171 +msgid "Extrema" +msgstr "Extrema" + +#: ../src/backend/filters/spectrumPlot.cpp:220 +msgid "count" +msgstr "nombre" + +#: ../src/backend/filters/spectrumPlot.cpp:305 +msgid "Mixed data" +msgstr "Donnée mixta. " + +#: ../src/backend/filters/spectrumPlot.cpp:446 +msgid "Background:" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:505 +msgid "Relative " +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:508 +msgid "Probability Density" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:587 +msgid "Step size for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:592 +msgid "Auto Min/max" +msgstr "Voiture Min/max. " + +#: ../src/backend/filters/spectrumPlot.cpp:596 +msgid "Automatically compute spectrum upper and lower bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:601 +msgid "Min" +msgstr "Min" + +#: ../src/backend/filters/spectrumPlot.cpp:604 +msgid "Starting position for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:609 +msgid "Max" +msgstr "Max" + +#: ../src/backend/filters/spectrumPlot.cpp:612 +msgid "Ending position for spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:620 +msgid "Logarithmic" +msgstr "Logarithmique" + +#: ../src/backend/filters/spectrumPlot.cpp:623 +msgid "Convert the plot to logarithmic mode" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:635 +msgid "Normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:638 +msgid "Rescale the plot height, to make inter-spectrum comparisons easier" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:645 +msgid "Lower Bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:649 +msgid "Do not use data below this x-value for normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:653 +msgid "Upper Bound" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:657 +msgid "Do not use data above this x-value for normalisation" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:675 +msgid "Visual style of plot" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:682 +msgid "Colour of plotted spectrum" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:697 +msgid "Model" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:700 +msgid "Fitting method to use" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:711 +msgid "Fit Start" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:712 +msgid "Start mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:718 +msgid "Fit End" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:719 +msgid "End mass value for fitting background" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:732 +msgid "Corr. Only" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:733 +msgid "Only show corrected spectrum, not fit" +msgstr "" + +#: ../src/backend/filters/spectrumPlot.cpp:741 +msgid "Background Mode" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:121 +#: ../src/backend/filters/rangeFile.h:96 +msgid "Ranging" +msgstr "en Variant. " + +#: ../src/backend/filters/rangeFile.cpp:564 +msgid "File to use for range data" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:574 +msgid "Drop unranged" +msgstr "Goutte unranged. " + +#: ../src/backend/filters/rangeFile.cpp:576 +msgid "Remove unranged points when generating output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:586 +msgid "Legend" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:588 +msgid "Display colour legend for enabled ions" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:592 +msgid "View" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:608 +msgid "All Ions" +msgstr "Tous les Ions. " + +#: ../src/backend/filters/rangeFile.cpp:609 +msgid "Enable/disable all ions at once" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:617 +msgid "Species" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:624 +msgid "IonID " +msgstr "IonID. " + +#: ../src/backend/filters/rangeFile.cpp:625 +msgid "Enable/disable specified ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:635 +msgid "Active Ion " +msgstr "Ió actif. " + +#: ../src/backend/filters/rangeFile.cpp:637 +msgid "If true, ion is used in output" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:647 +msgid "Colour " +msgstr "Couleurs" + +#: ../src/backend/filters/rangeFile.cpp:651 +msgid "Colour used to represent ion" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:674 +msgid "All Ranges" +msgstr "Toutes les Gammes. " + +#: ../src/backend/filters/rangeFile.cpp:675 +msgid "Enable/disable all ranges" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:690 +msgid "Active Rng " +msgstr "Actif Rng. " + +#: ../src/backend/filters/rangeFile.cpp:693 +msgid "" +"Enable/disable specified range (ion must also be enabled to activiate range)" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:697 +msgid "Ion " +msgstr "Ion" + +#: ../src/backend/filters/rangeFile.cpp:700 +msgid "Name of ion associate to this range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:709 +msgid "Start rng " +msgstr "Début rng. " + +#: ../src/backend/filters/rangeFile.cpp:712 +msgid "Start value for range" +msgstr "" + +#: ../src/backend/filters/rangeFile.cpp:717 +msgid "End rng " +msgstr "Fin rng. " + +#: ../src/backend/filters/rangeFile.cpp:720 +msgid "Stopping value for range`" +msgstr "" + +#: ../src/backend/state.cpp:165 +msgid "" +"This file is a \"state\" file for the 3Depict program, and stores " +"information about a particular analysis session. This file should be a valid " +"\"XML\" file" +msgstr "" +"Ce archives est une information enveloppe une séance d'anàlisi particulière. " +"Ce archives devrait être un valable. " + +#: ../src/backend/state.cpp:337 +msgid "Failed to allocate parser" +msgstr "Failli à allocate parser. " + +#: ../src/backend/state.cpp:372 +msgid "" +"Unable to retrieve root node in input state file... Is this really a non-" +"empty XML file?" +msgstr "" +"Impossible de récupérer le nœud racine dans le fichier de l'état " +"d'entrée ... Est-ce vraiment un fichier XML non vide?" + +#: ../src/backend/state.cpp:379 +msgid "Base state node missing. Is this really a state XML file??" +msgstr "Noeud d'état de base manquant. Est-ce vraiment un fichier d'état XML?" + +#: ../src/backend/state.cpp:408 +msgid "State was created by a newer version of this program.. " +msgstr "" +"L'état a été créé pour une version une plus nouvelle de ce programme... " + +#: ../src/backend/state.cpp:409 +msgid "file reading will continue, but may fail." +msgstr "Lecture d'archives continuera, mais il peut faillir." + +#: ../src/backend/state.cpp:419 +msgid "" +"Warning, unparseable version number in state file. File reading will " +"continue, but may fail" +msgstr "" +"Avís, unparseable numéro de version en archives estatal. Lecture d'archives " +"continuera, mais il peut faillir. " + +#: ../src/backend/state.cpp:428 +msgid "Unable to find the \"writer\" node" +msgstr "Unable to find the \"writer\" node" + +#: ../src/backend/state.cpp:438 +msgid "Unable to find the \"backcolour\" node." +msgstr "Impossible de trouver le \"backcolour\" noeud." + +#: ../src/backend/state.cpp:445 +msgid "\"backcolour\" node missing \"r\" value." +msgstr "" + +#: ../src/backend/state.cpp:450 +msgid "Unable to interpret \"backColour\" node's \"r\" value." +msgstr "Impossible d'interpréter \"backColour\" noeud \"r\" de valeur." + +#: ../src/backend/state.cpp:458 +msgid "\"backcolour\" node missing \"g\" value." +msgstr "" + +#: ../src/backend/state.cpp:464 +msgid "Unable to interpret \"backColour\" node's \"g\" value." +msgstr "Impossible d'interpréter \"backColour\" noeud \"g\" de valeur." + +#: ../src/backend/state.cpp:472 +msgid "\"backcolour\" node missing \"b\" value." +msgstr "" + +#: ../src/backend/state.cpp:478 +msgid "Unable to interpret \"backColour\" node's \"b\" value." +msgstr "Impossible d'interpréter \"backColour\" noeud \"b\" de valeur." + +#: ../src/backend/state.cpp:485 +msgid "\"backcolour\"s rgb values must be in range [0,1]" +msgstr "" + +#: ../src/backend/state.cpp:513 +msgid "Unable to find or interpret \"showaxis\" node" +msgstr "Impossible de trouver ou d'interpréter \"showaxis\" noeud" + +#: ../src/backend/state.cpp:557 +msgid "Unable to locate \"filtertree\" node." +msgstr "Incapaç de localitzar. " + +#: ../src/backend/state.cpp:573 +msgid "Cameras section missing \"active\" node." +msgstr "Impossible de localiser le \"filtertree\" noeud." + +#: ../src/backend/state.cpp:581 +msgid "Unable to find property \"value\" for \"cameras->active\" node." +msgstr "" + +#: ../src/backend/state.cpp:587 +msgid "Unable to interpret property \"value\" for \"cameras->active\" node." +msgstr "" +"Impossible d'interpréter la propriété \"valeur\" pour \"caméras-> active\" " +"noeud." + +#: ../src/backend/state.cpp:607 +msgid "Failed to interpret camera state for camera : " +msgstr "" + +#: ../src/backend/state.cpp:615 +msgid "Unable to interpret the camera type for camera : " +msgstr "" + +#: ../src/backend/state.cpp:671 +msgid "Unable to locate stash name for stash " +msgstr "Incapaç de localitzar stash nom pour stash. " + +#: ../src/backend/state.cpp:678 +msgid "Empty stash name for stash " +msgstr "Vide stash nom pour stash. " + +#: ../src/backend/state.cpp:687 +msgid "No filter tree for stash:" +msgstr "" + +#: ../src/backend/state.cpp:693 +msgid "For stash " +msgstr "Pour stash. " + +#: ../src/backend/state.cpp:725 +msgid "Unrecognised effect :" +msgstr "Unrecognised Effet :. " + +#: ../src/backend/state.cpp:735 +msgid "Duplicate effect found" +msgstr "Effet de doublé a trouvé. " + +#: ../src/backend/state.cpp:735 +msgid " cannot use." +msgstr " Ne peut pas utiliser." + +#: ../src/backend/state.cpp:745 +msgid "Error reading effect : " +msgstr "Effet de lecture de l'erreur :. " + +#: ../src/backend/state.cpp:965 +msgid "-merge" +msgstr "-Fusionner. " + +#: ../src/backend/filtertreeAnalyse.cpp:225 +msgid "" +"Parent filter has no output, but filter requires input -- there is no point " +"in placing a child filter here." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:226 +msgid "Leaf-only filter with child" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:236 +msgid "" +"Parent filters' output will be blocked by child, without use. Parent results " +"will be dropped." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:237 +#: ../src/backend/filtertreeAnalyse.cpp:251 +msgid "Bad parent->child pair" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:250 +msgid "" +"First filter does not output anything useable by child filter. Child filter " +"not useful." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:330 +msgid "Spatial results possibly altered" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:331 +msgid "" +"Filters and settings selected that could alter reported results that depend " +"upon density. Check to see if spatial sampling may be happening in the " +"filter tree - this warning is provisional only." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:399 +msgid "Filter needs parent \"" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:400 +msgid "" +"\" but does not have one. Filter may not function correctly until this " +"parent is given." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:401 +msgid "Filter missing needed parent" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:432 +msgid "Bad range filter settings" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:433 +msgid "" +"Rangefile set to drop unranged data, however a child filter requires it." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:529 +msgid "Filter cannot generate data, but has no input - it is at the tree base." +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:530 +msgid "Non data-generating filter at root" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:632 +msgid "Composition results possibly altered" +msgstr "" + +#: ../src/backend/filtertreeAnalyse.cpp:633 +msgid "" +"Filters and settings selected that could bias reported composition. Check to " +"see if species biasing may occcur in the filter tree - this warning is " +"provisional only." +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:44 ../src/backend/APT/APTFileIO.cpp:79 +#: ../src/backend/APT/APTFileIO.cpp:103 ../src/backend/APT/APTFileIO.cpp:123 +msgid "Error opening file" +msgstr "Erreur lors de l'ouverture du fichier" + +#: ../src/backend/APT/APTFileIO.cpp:45 +msgid "Only found header, no data" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:46 +msgid "Unable to reopen file after first scan" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:47 +msgid "Error whilst reading file contents" +msgstr "Erreur whilst en lisant contenus d'archives. " + +#: ../src/backend/APT/APTFileIO.cpp:48 ../src/backend/APT/APTFileIO.cpp:49 +msgid "Unexpected file format" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:50 +msgid "Insufficient memory to continue" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:54 +msgid "Memory allocation failure on POS load" +msgstr "Insuccès d'assignació de la mémoire en POS charge. " + +#: ../src/backend/APT/APTFileIO.cpp:55 +msgid "Error opening pos file" +msgstr "L'Erreur qu'oeuvre pos archives. " + +#: ../src/backend/APT/APTFileIO.cpp:56 +msgid "Pos file empty" +msgstr "Pos Archive vide. " + +#: ../src/backend/APT/APTFileIO.cpp:57 +msgid "Pos file size appears to have non-integer number of entries" +msgstr "Taille du fichier Pos semble avoir non entier nombre d'entrées" + +#: ../src/backend/APT/APTFileIO.cpp:58 +msgid "Error reading from pos file (after open)" +msgstr "Erreur de lecture du fichier pos (après ouverture)" + +#: ../src/backend/APT/APTFileIO.cpp:59 +msgid "Error - Found NaN in pos file" +msgstr "Erreur - Trouvée NaN en pos archives. " + +#: ../src/backend/APT/APTFileIO.cpp:60 +msgid "Error - Found Inf in pos file" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:61 +msgid "Pos load aborted by interrupt." +msgstr "Pos La Charge avortada pour interrompre." + +#: ../src/backend/APT/APTFileIO.cpp:80 +msgid "No numerical data found" +msgstr "Ne la donnée numérique a trouvé. " + +#: ../src/backend/APT/APTFileIO.cpp:81 +msgid "Error re-opening file, after first scan" +msgstr "Erreur re-archives d'ouverture, après que premier scanner. " + +#: ../src/backend/APT/APTFileIO.cpp:82 +msgid "Unable to read file contents after open" +msgstr "Incapaç de lire contenus d'archives après ouvert. " + +#: ../src/backend/APT/APTFileIO.cpp:83 +msgid "Error interpreting field in file" +msgstr "L'Erreur qu'interprète champ en archives. " + +#: ../src/backend/APT/APTFileIO.cpp:84 +msgid "Incorrect number of fields in file" +msgstr "Incorrect Numéro de champs en archives. " + +#: ../src/backend/APT/APTFileIO.cpp:85 ../src/backend/APT/APTFileIO.cpp:107 +msgid "Unable to allocate memory to store data" +msgstr "Incapaç à allocate mémoire pour stocker donnée. " + +#: ../src/backend/APT/APTFileIO.cpp:104 +msgid "File is empty" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:105 +msgid "Filesize does not match expected format" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:106 +msgid "File version number not <4, as expected" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:108 +msgid "Unable to detect endian-ness in file" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:122 +msgid "Error interpreting file contents" +msgstr "" + +#: ../src/backend/APT/APTFileIO.cpp:124 +msgid "Aborted opening file" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:48 +msgid "Error opening file, check name and permissions." +msgstr "Archives d'ouverture de l'erreur, nom de contrôle et permissions." + +#: ../src/backend/APT/APTRanges.cpp:49 +msgid "" +"Error interpreting range file header, expecting ion count and range count, " +"respectively." +msgstr "" +"L'Erreur qu'interprète encapçalament d'archives de la gamme, en attendant " +"l'ió compte et la gamme compte, respectivement." + +#: ../src/backend/APT/APTRanges.cpp:50 +msgid "" +"Range file appears to be empty, check file is a proper range file and is not " +"empty." +msgstr "" +"Archives de gamme apparaît pour être vide, archives de contrôle est un " +"archives de gamme approprié et ce ne est pas vide." + +#: ../src/backend/APT/APTRanges.cpp:51 +msgid "Error reading the long name for ion." +msgstr "L'Erreur que lit le nom long pour ió." + +#: ../src/backend/APT/APTRanges.cpp:52 +msgid "Error reading the short name for ion." +msgstr "L'Erreur que lit le nom court pour ió." + +#: ../src/backend/APT/APTRanges.cpp:53 +msgid "" +"Error reading colour data in the file, expecting 3 decimal values, space " +"separated." +msgstr "" +"Donnée de couleur de lecture d'erreur en le archives, en attendant 3 valeurs " +"decimals, l'espace a séparé." + +#: ../src/backend/APT/APTRanges.cpp:54 +msgid "" +"Tried skipping to table separator line (line with dashes), but did not find " +"it." +msgstr "" +"Essayé skipping à table separator ligne (ligne avec dashes), mais ne l'a " +"trouvé." + +#: ../src/backend/APT/APTRanges.cpp:55 +msgid "" +"Number of ions in the table header did not match the number specified at the " +"start of the file" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:56 +msgid "" +"Unexpected failure whilst trying to skip over range lead-in data (bit before " +"range start value)" +msgstr "" +"Insuccès inattendu whilst en essayant à skip enveloppe avantage de gamme-en " +"donnée (bit avant de valeur de début de la gamme). " + +#: ../src/backend/APT/APTRanges.cpp:57 +msgid "" +"Range table had an incorrect number of entries, should be 2 or 3 + number of " +"ranges" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:58 +msgid "Unable to read range start and end values" +msgstr "Incapaç de lire début de gamme et valeurs de fin. " + +#: ../src/backend/APT/APTRanges.cpp:59 +msgid "Unable to read range table entry" +msgstr "Incapaç de lire entrée de table de la gamme. " + +#: ../src/backend/APT/APTRanges.cpp:60 +msgid "" +"Error reading file, unexpected format, are you sure it is a proper range " +"file?" +msgstr "" +"Archives de lecture de l'erreur, format inattendu, t'est sûr est un archives " +"de gamme approprié?. " + +#: ../src/backend/APT/APTRanges.cpp:61 +msgid "" +"Too many ranges appeared to have range entries with no usable data (eg, all " +"blank)" +msgstr "" +"Trop varie apparus pour avoir des entrées de gamme sans donnée utilisable " +"(eg, tout espace). " + +#: ../src/backend/APT/APTRanges.cpp:62 +msgid "" +"Range file appears to contain malformed data, check things like start and " +"ends of m/c are not equal or flipped." +msgstr "" +"Archives de gamme apparaît pour contenir malformed donnée, choses de " +"contrôle comme début et fins de m/c n'est pas égal ou flipped." + +#: ../src/backend/APT/APTRanges.cpp:63 +msgid "Range file appears to be inconsistent (eg, overlapping ranges)" +msgstr "" +"Archives de gamme apparaît pour être inconsistent (eg, solapant gammes). " + +#: ../src/backend/APT/APTRanges.cpp:64 +msgid "No ion name mapping found for multiple ion." +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:65 +msgid "Polyatomic extension range matches multiple masses in first section" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:66 +msgid "Range file is exceedingly large. Refusing to open" +msgstr "" + +#: ../src/backend/APT/APTRanges.cpp:1404 +msgid "" +"Range headings do not match order of the ions listed in the name " +"specifications. The name specification ordering will be used when reading " +"the range table, as the range heading section is declared as a comment in " +"the file-format specifications, and is not to be intepreted by this program. " +"Check range-species associations actually match what you expect." +msgstr "" + +#: ../src/backend/filter.cpp:54 +msgid "2D Plot" +msgstr "" + +#: ../src/backend/filter.cpp:56 +msgid "Range" +msgstr "Plage" + +#: ../src/backend/filter.cpp:57 +msgid "Voxel" +msgstr "Voxel. " + +#: ../src/backend/filters/transform.h:71 +msgid "Ion. Transform" +msgstr "Ió. Il transforme. " + +#: ../src/backend/filters/ionColour.h:66 +msgid "Spectral Colour" +msgstr "Spectre" + +#: ../src/backend/filters/boundingBox.h:76 +msgid "Bound box" +msgstr "Caisse attachée. " + +#: ../src/backend/filters/ionDownsample.h:79 +msgid "Ion Sampler" +msgstr "Mostrejador d'ió. " + +#: ../src/backend/filters/profile.h:123 +msgid "Comp. Prof." +msgstr "Comp. Prof." + +#: ../src/backend/filters/ionInfo.h:103 +msgid "Ion info" +msgstr "Ió info. " + +#: ../src/backend/filters/dataLoad.h:145 +msgid "Pos Data" +msgstr "Pos Donnée. " + +#: ../src/backend/filters/externalProgram.h:69 +msgid "Ext. Program" +msgstr "Ext. Programme. " + +#: ../data/startup-tips.txt:5 +msgid "" +"You can reset the main view by tapping the space bar. Hold down modifier " +"keys like shift,ctrl to change the axis. Double tap to switch which axis to " +"look the other way (+ve or -ve direction)" +msgstr "" + +#: ../data/startup-tips.txt:6 +msgid "" +"You can delete filters from the tree by selecting them, then tapping delete?" +msgstr "" + +#: ../data/startup-tips.txt:7 +msgid "" +"Multiple languages are supported? You can translate the program into your " +"own language at https://www.transifex.com/projects/p/3depict/" +msgstr "" + +#: ../data/startup-tips.txt:8 +msgid "" +"Package files can be easily shared to allow others to view your analysis, " +"using the File->Export->Package menu item. This will automatically import " +"all referenced files (eg pos/rng files) into a single shareable folder" +msgstr "" + +#: ../data/startup-tips.txt:9 +msgid "" +"You can export plots to SVG \"Vector\" format, for easier editing - edit " +"your plots in inkscape!" +msgstr "" + +#: ../data/startup-tips.txt:10 +msgid "You can access the manual from the Help menu" +msgstr "" + +#: ../data/startup-tips.txt:11 +msgid "You can change filter defaults using the Edit->Preferences menu item" +msgstr "" + +#: ../data/startup-tips.txt:12 +msgid "" +"You can overlay multiple plots at once, by selecting more than on plot at a " +"time (e.g. using Ctrl)" +msgstr "" + +#: ../data/startup-tips.txt:13 +msgid "" +"Calculations are much faster (more than linear speedup) when working with " +"smaller datasets - try sampling, or clipping out a small region to work " +"faster, then remove the sampling when you are ready" +msgstr "" + +#: ../data/startup-tips.txt:14 +msgid "" +"You can abort most calculations either by pressing Escape (OSX/Linux), or by " +"using the Abort button (Windows)" +msgstr "" + +#: ../data/startup-tips.txt:15 +msgid "" +"That anyone can contribute to improving this program, even without knowing " +"about computer programming? Reporting bugs helps us to prioritise our work, " +"and directs us to fix real problems for all users" +msgstr "" + +#: ../data/startup-tips.txt:16 +msgid "" +"You can load more than one file at a time, then either operate on them " +"separately, or together" +msgstr "" + +#: ../data/startup-tips.txt:17 +msgid "" +"You can have more than one range file for different parts of your dataset" +msgstr "" + +#: ../data/startup-tips.txt:18 +msgid "" +"Cameras can be saved and retrieved whenever you like, using the camera tab" +msgstr "" + +#: ../data/startup-tips.txt:19 +msgid "" +"Subsections of the filter tree can be saved to the \"Stashed filters\" drop-" +"down" +msgstr "" + +#: ../data/startup-tips.txt:20 +msgid "" +"The console tab along the bottom often shows useful messages from filters. " +"When new messages appear, a small symbol is shown on the tab" +msgstr "" + +#: ../data/startup-tips.txt:21 +msgid "" +"The raw data used for any plot can be accessed from the \"Raw\" tab on the " +"bottom panel" +msgstr "" + +#: ../data/startup-tips.txt:22 +msgid "" +"You can ask questions about the program, or using it on your data on our " +"forums (https://sourceforge.net/p/threedepict/discussion/general/)" +msgstr "" + +#: ../data/startup-tips.txt:23 +msgid "" +"By creating a camera, you can switch between orthographic (parallel) and " +"perspective views" +msgstr "" + +#: ../data/startup-tips.txt:24 +msgid "" +"You can open multiple files at once, and get a side-by-side view by " +"translating (shifting) one of the datasets to one side" +msgstr "" + +#: ../data/startup-tips.txt:25 +msgid "" +"From version 0.0.20, vector values in filter properties (e.g. \"(1,0,0)\") " +"can be specified using ISO 31-11 spherical coordinates using the following " +"notation , with angles in degrees" +msgstr "" + +#: ../data/startup-tips.txt:26 +msgid "" +"You can change the behavior of filter dragging by holding Ctrl (mac: cmd) or " +"Shift whilst dragging? This switches between move, copy and \"splice" +msgstr "" + +#: ../data/startup-tips.txt:27 +msgid "" +"We like to know where we are being helpful? Please consider writing the " +"program and version number in any work you might publish - whether in print " +"or online. Alternatively, link to our website, or write to us to let us know " +"we helped!" +msgstr "" + +#: ../data/startup-tips.txt:28 +msgid "" +"You can merge files by placing two \"Pos Data\" filters in series, then " +"saving the result?" +msgstr "" + +#~ msgid "ORNL format RNG (*.rng)|*.rng|All Files (*)|*" +#~ msgstr "ORNL Formé RNG (*.rng)|*.rng|Toutes les Archives (*)|*. " + +#~ msgid "POS Data (*.pos)|*.pos|All Files (*)|*" +#~ msgstr "POS Donnée (*.pos)|*.pos|Toutes les Archives (*)|*. " + +#~ msgid "Moving - Hold ⌘ (command) to copy" +#~ msgstr "Mouvant - Contrôle ⌘ (ordre) pour copiar. " + +#~ msgid "Moving - Hold control to copy" +#~ msgstr "Mouvant - contrôle de Contrôle pour copiar. " + +#~ msgid "\\% Done (Esc aborts)" +#~ msgstr "\\% Fait (Esc avorta). " + +#~ msgid "\\% Done" +#~ msgstr "\\% Fait. " + +#~ msgid "Mass-to-Charge (amu/e)" +#~ msgstr "Trop-à-Charge (amu/e). " + +#~ msgid "Pre-Allocate" +#~ msgstr "Pre-Allocate. " diff -Nru 3depict-0.0.19-1/translations/makeTranslations 3depict-0.0.20/translations/makeTranslations --- 3depict-0.0.19-1/translations/makeTranslations 2015-12-30 12:24:30.000000000 +0000 +++ 3depict-0.0.20/translations/makeTranslations 2017-02-04 23:41:08.000000000 +0000 @@ -13,7 +13,7 @@ TRANSLATION_INSTALL="/usr/share/locale/" #Space separated list of maintained locales -MAINTAINED_LOCALES="de_DE" +MAINTAINED_LOCALES="de_DE fr_FR es_ES" echo "Program name is $PROGRAM_NAME" @@ -62,6 +62,13 @@ for i in $MAINTAINED_LOCALES do msgmerge -N ${PROGRAM_NAME}_${i}.po update.pot > tmp.pot + #replace the default headers from msgmerge + THISYEAR=`date | awk '{print $6}'` + sed -i "s/YEAR THE PACKAGE.*/$THISYEAR/" tmp.pot + sed -i "s/SOME DESCRIPTIVE TITLE.*/Translation file for locale $i/" tmp.pot + sed -i 's/PACKAGE package/3Depict package/' tmp.pot + + #overwrite po mv tmp.pot ${PROGRAM_NAME}_${i}.po done