From 090acbb1ab9afeebe95b43d59bfc0c91991dcfda Mon Sep 17 00:00:00 2001 From: thomased Date: Wed, 29 Nov 2023 04:12:31 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20rmaia/pa?= =?UTF-8?q?vo@2fcb2d0f426f56c037bb9a601e2f735eb921277a=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 2 +- CODE_OF_CONDUCT.html | 2 +- CONTRIBUTING.html | 2 +- LICENSE.html | 2 +- articles/index.html | 2 +- articles/pavo.html | 2 +- authors.html | 2 +- index.html | 2 +- news/index.html | 10 +- pkgdown.yml | 4 +- reference/adjacent.html | 2 +- reference/aggplot.html | 2 +- reference/aggspec.html | 2 +- reference/as.rimg.html | 2 +- reference/as.rspec.html | 2 +- reference/axistetra.html | 2 +- reference/bgandilum.html | 2 +- reference/bootcoldist.html | 2 +- reference/categorical.html | 2 +- reference/catplot.html | 2 +- reference/cie.html | 2 +- reference/cieplot.html | 2 +- reference/classify.html | 2 +- reference/coc.html | 2 +- reference/cocplot.html | 2 +- reference/coldist.html | 2 +- reference/coldist2mat.html | 2 +- reference/colspace.html | 2 +- reference/diplot.html | 2 +- reference/dispace.html | 2 +- reference/explorespec.html | 2 +- reference/find_astar.html | 2 +- reference/flowers.html | 2 +- reference/getimg.html | 2 +- reference/getspec.html | 2 +- reference/hexagon.html | 2 +- reference/hexplot.html | 2 +- reference/img_conversion.html | 2 +- reference/index.html | 2 +- reference/irrad2flux.html | 2 +- reference/is.colspace.html | 2 +- reference/is.vismodel.html | 2 +- reference/jnd2xyz.html | 2 +- reference/jndplot.html | 2 +- reference/jndrot.html | 2 +- reference/legendtetra.html | 2 +- .../libs/htmlwidgets-1.6.3/htmlwidgets.js | 901 ++++++++++++++++++ reference/merge.rspec.html | 2 +- reference/pavo-package.html | 2 +- reference/peakshape.html | 2 +- reference/plot.colspace.html | 10 +- reference/plot.rimg.html | 2 +- reference/plot.rspec.html | 2 +- reference/plot.sensmod.html | 2 +- reference/plotsmooth.html | 2 +- reference/points.colspace.html | 2 +- reference/procimg.html | 2 +- reference/procspec.html | 2 +- reference/projplot.html | 2 +- reference/segplot.html | 2 +- reference/segspace.html | 2 +- reference/sensdata.html | 2 +- reference/sensmodel.html | 2 +- reference/sicalis.html | 2 +- reference/simulate_spec.html | 2 +- reference/spec2rgb.html | 2 +- reference/subset.rspec.html | 2 +- reference/summary.colspace.html | 2 +- reference/summary.rimg.html | 2 +- reference/summary.rspec.html | 2 +- reference/summary.vismodel.html | 2 +- reference/tcspace.html | 2 +- reference/tcsplot.html | 10 +- reference/teal.html | 2 +- reference/tetraplot.html | 2 +- reference/transmissiondata.html | 2 +- reference/triplot.html | 2 +- reference/trispace.html | 2 +- reference/ttvertex.html | 2 +- reference/vismodel.html | 2 +- reference/vissyst.html | 2 +- reference/vol.html | 2 +- reference/voloverlap.html | 2 +- 83 files changed, 1000 insertions(+), 91 deletions(-) create mode 100644 reference/libs/htmlwidgets-1.6.3/htmlwidgets.js diff --git a/404.html b/404.html index f4870575..fd9b2287 100644 --- a/404.html +++ b/404.html @@ -35,7 +35,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/CODE_OF_CONDUCT.html b/CODE_OF_CONDUCT.html index 5ab036c0..9d2c6192 100644 --- a/CODE_OF_CONDUCT.html +++ b/CODE_OF_CONDUCT.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/CONTRIBUTING.html b/CONTRIBUTING.html index 45d0490e..66686fcd 100644 --- a/CONTRIBUTING.html +++ b/CONTRIBUTING.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/LICENSE.html b/LICENSE.html index e66dd510..f0ad05d1 100644 --- a/LICENSE.html +++ b/LICENSE.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/articles/index.html b/articles/index.html index e1f4d945..57846777 100644 --- a/articles/index.html +++ b/articles/index.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/articles/pavo.html b/articles/pavo.html index 48f852f7..f908a2bf 100644 --- a/articles/pavo.html +++ b/articles/pavo.html @@ -36,7 +36,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/authors.html b/authors.html index 8bbcb17f..a403dcaa 100644 --- a/authors.html +++ b/authors.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/index.html b/index.html index 4c8d37e7..1fdfef4e 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/news/index.html b/news/index.html index 14c6f929..4d6c50c7 100644 --- a/news/index.html +++ b/news/index.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 @@ -68,6 +68,14 @@

Changelog

Source: NEWS.md +
+ +
+

MINOR FEATURES AND BUG FIXES

+
  • +as.rspec() now works out of the box with tibble, rather than requiring users to pass a standard data.frame.
  • +
+
diff --git a/pkgdown.yml b/pkgdown.yml index 8838e51d..209bd26b 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -1,9 +1,9 @@ pandoc: 2.19.2 pkgdown: 2.0.7.9000 -pkgdown_sha: c9206802f2888992de92aa41f517ba7812f05331 +pkgdown_sha: 5a0a31f89d7c839c04a929844e4b7216196189ca articles: pavo: pavo.html -last_built: 2023-09-25T09:11Z +last_built: 2023-11-29T04:11Z urls: reference: http://pavo.colrverse.com/reference article: http://pavo.colrverse.com/articles diff --git a/reference/adjacent.html b/reference/adjacent.html index f2191e2b..a0bd2505 100644 --- a/reference/adjacent.html +++ b/reference/adjacent.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0
diff --git a/reference/aggplot.html b/reference/aggplot.html index 98d0d8be..fd5a2d18 100644 --- a/reference/aggplot.html +++ b/reference/aggplot.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0
diff --git a/reference/aggspec.html b/reference/aggspec.html index b7ad5188..ffb73f76 100644 --- a/reference/aggspec.html +++ b/reference/aggspec.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/as.rimg.html b/reference/as.rimg.html index 254e6657..a3a73670 100644 --- a/reference/as.rimg.html +++ b/reference/as.rimg.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/as.rspec.html b/reference/as.rspec.html index 4677bfa9..6547cced 100644 --- a/reference/as.rspec.html +++ b/reference/as.rspec.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/axistetra.html b/reference/axistetra.html index 6898723d..74b726c9 100644 --- a/reference/axistetra.html +++ b/reference/axistetra.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/bgandilum.html b/reference/bgandilum.html index 6f4fad35..09228ddc 100644 --- a/reference/bgandilum.html +++ b/reference/bgandilum.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/bootcoldist.html b/reference/bootcoldist.html index e0a3c251..973373ea 100644 --- a/reference/bootcoldist.html +++ b/reference/bootcoldist.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/categorical.html b/reference/categorical.html index 0a9c3181..dcd71101 100644 --- a/reference/categorical.html +++ b/reference/categorical.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/catplot.html b/reference/catplot.html index dd002ded..c94d8743 100644 --- a/reference/catplot.html +++ b/reference/catplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/cie.html b/reference/cie.html index dc3b52e5..8dc63af3 100644 --- a/reference/cie.html +++ b/reference/cie.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/cieplot.html b/reference/cieplot.html index 25eeeb17..9fe9fbe2 100644 --- a/reference/cieplot.html +++ b/reference/cieplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/classify.html b/reference/classify.html index 74c5eab7..8f54af12 100644 --- a/reference/classify.html +++ b/reference/classify.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/coc.html b/reference/coc.html index 7002559a..c721943c 100644 --- a/reference/coc.html +++ b/reference/coc.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/cocplot.html b/reference/cocplot.html index 2c85c31b..d5cd1122 100644 --- a/reference/cocplot.html +++ b/reference/cocplot.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/coldist.html b/reference/coldist.html index 88ebbe9e..c042a03a 100644 --- a/reference/coldist.html +++ b/reference/coldist.html @@ -22,7 +22,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/coldist2mat.html b/reference/coldist2mat.html index 5dba21fa..3a74b1e8 100644 --- a/reference/coldist2mat.html +++ b/reference/coldist2mat.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/colspace.html b/reference/colspace.html index b62990ab..5eea274d 100644 --- a/reference/colspace.html +++ b/reference/colspace.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/diplot.html b/reference/diplot.html index 68ca670b..7687955e 100644 --- a/reference/diplot.html +++ b/reference/diplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/dispace.html b/reference/dispace.html index ee37ee6e..bf23d8e1 100644 --- a/reference/dispace.html +++ b/reference/dispace.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/explorespec.html b/reference/explorespec.html index d0181493..6ee6e49b 100644 --- a/reference/explorespec.html +++ b/reference/explorespec.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/find_astar.html b/reference/find_astar.html index 83fcb445..7d3b80e5 100644 --- a/reference/find_astar.html +++ b/reference/find_astar.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/flowers.html b/reference/flowers.html index 6986b380..63179af7 100644 --- a/reference/flowers.html +++ b/reference/flowers.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/getimg.html b/reference/getimg.html index c3d502c3..fd57b2b6 100644 --- a/reference/getimg.html +++ b/reference/getimg.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/getspec.html b/reference/getspec.html index ed7a34bd..ab9fc571 100644 --- a/reference/getspec.html +++ b/reference/getspec.html @@ -20,7 +20,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/hexagon.html b/reference/hexagon.html index e30fe5b2..ecc9e422 100644 --- a/reference/hexagon.html +++ b/reference/hexagon.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/hexplot.html b/reference/hexplot.html index 9be109a8..f4392d71 100644 --- a/reference/hexplot.html +++ b/reference/hexplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/img_conversion.html b/reference/img_conversion.html index ea771340..6dfcebc3 100644 --- a/reference/img_conversion.html +++ b/reference/img_conversion.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/index.html b/reference/index.html index a00c466a..57d5f485 100644 --- a/reference/index.html +++ b/reference/index.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/irrad2flux.html b/reference/irrad2flux.html index 9c9329f5..4948c91e 100644 --- a/reference/irrad2flux.html +++ b/reference/irrad2flux.html @@ -22,7 +22,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/is.colspace.html b/reference/is.colspace.html index 812f3bd3..f86430d9 100644 --- a/reference/is.colspace.html +++ b/reference/is.colspace.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/is.vismodel.html b/reference/is.vismodel.html index 88602510..21eb9cd6 100644 --- a/reference/is.vismodel.html +++ b/reference/is.vismodel.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/jnd2xyz.html b/reference/jnd2xyz.html index 712642d3..c664e14e 100644 --- a/reference/jnd2xyz.html +++ b/reference/jnd2xyz.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/jndplot.html b/reference/jndplot.html index ff21d6a3..1ef2aa04 100644 --- a/reference/jndplot.html +++ b/reference/jndplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/jndrot.html b/reference/jndrot.html index c907174e..71cd2983 100644 --- a/reference/jndrot.html +++ b/reference/jndrot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/legendtetra.html b/reference/legendtetra.html index 960c3ab6..1a5e65b7 100644 --- a/reference/legendtetra.html +++ b/reference/legendtetra.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/libs/htmlwidgets-1.6.3/htmlwidgets.js b/reference/libs/htmlwidgets-1.6.3/htmlwidgets.js new file mode 100644 index 00000000..1067d029 --- /dev/null +++ b/reference/libs/htmlwidgets-1.6.3/htmlwidgets.js @@ -0,0 +1,901 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval("(" + code + ")"); + } catch(error) { + if (!(error instanceof SyntaxError)) { + throw error; + } + try { + result = eval(code); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var rect = el.getBoundingClientRect(); + var result = bindingDef.initialize(el, rect.width, rect.height); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + var getSize = function(el) { + if (sizeObj) { + return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} + } else { + var rect = el.getBoundingClientRect(); + return {w: rect.width, h: rect.height} + } + }; + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + var size = getSize(el); + initResult = binding.initialize(el, size.w, size.h); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = getSize(el); + var resizeHandler = function(e) { + var size = getSize(el); + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); diff --git a/reference/merge.rspec.html b/reference/merge.rspec.html index 7e94ac7e..b8ea2d57 100644 --- a/reference/merge.rspec.html +++ b/reference/merge.rspec.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0
diff --git a/reference/pavo-package.html b/reference/pavo-package.html index 76892f6d..8fafef7c 100644 --- a/reference/pavo-package.html +++ b/reference/pavo-package.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/peakshape.html b/reference/peakshape.html index ec28b5c8..595874cd 100644 --- a/reference/peakshape.html +++ b/reference/peakshape.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/plot.colspace.html b/reference/plot.colspace.html index 3c8b68d9..b60fc75b 100644 --- a/reference/plot.colspace.html +++ b/reference/plot.colspace.html @@ -2,7 +2,7 @@ Plot spectra in a colourspace — plot.colspace • pavo +
@@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0
@@ -181,9 +181,9 @@

Examples

tcs.breast <- subset(tcs.sicalis, "B") tcsplot(tcs.crown, col = "blue") tcspoints(tcs.breast, col = "red") - -
- + +
+ ## Plot convex hull in interactive tetrahedron tcsplot(tcs.sicalis, col = "blue", size = 0.005) tcsvol(tcs.sicalis) diff --git a/reference/plot.rimg.html b/reference/plot.rimg.html index c9379f68..5d38290f 100644 --- a/reference/plot.rimg.html +++ b/reference/plot.rimg.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/plot.rspec.html b/reference/plot.rspec.html index f3d166e8..1b620e70 100644 --- a/reference/plot.rspec.html +++ b/reference/plot.rspec.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/plot.sensmod.html b/reference/plot.sensmod.html index 0b670f72..607d0b58 100644 --- a/reference/plot.sensmod.html +++ b/reference/plot.sensmod.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/plotsmooth.html b/reference/plotsmooth.html index 4bcc3b1f..9783ec2b 100644 --- a/reference/plotsmooth.html +++ b/reference/plotsmooth.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/points.colspace.html b/reference/points.colspace.html index 72f521cc..30d079f3 100644 --- a/reference/points.colspace.html +++ b/reference/points.colspace.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/procimg.html b/reference/procimg.html index 57b804e6..c99ee170 100644 --- a/reference/procimg.html +++ b/reference/procimg.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/procspec.html b/reference/procspec.html index 4d46dd6e..530a2a1b 100644 --- a/reference/procspec.html +++ b/reference/procspec.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/projplot.html b/reference/projplot.html index 6289dc0d..cbbee4c2 100644 --- a/reference/projplot.html +++ b/reference/projplot.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/segplot.html b/reference/segplot.html index 9090a1cc..2abeb79f 100644 --- a/reference/segplot.html +++ b/reference/segplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/segspace.html b/reference/segspace.html index 9c3041be..a7a77c57 100644 --- a/reference/segspace.html +++ b/reference/segspace.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/sensdata.html b/reference/sensdata.html index 8848679c..b6d5d7a4 100644 --- a/reference/sensdata.html +++ b/reference/sensdata.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/sensmodel.html b/reference/sensmodel.html index 4ea0d07f..3aa71d3a 100644 --- a/reference/sensmodel.html +++ b/reference/sensmodel.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/sicalis.html b/reference/sicalis.html index ce2ebaf3..e63fe75c 100644 --- a/reference/sicalis.html +++ b/reference/sicalis.html @@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/simulate_spec.html b/reference/simulate_spec.html index 0420bbda..ae4fcb68 100644 --- a/reference/simulate_spec.html +++ b/reference/simulate_spec.html @@ -20,7 +20,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/spec2rgb.html b/reference/spec2rgb.html index 279427c3..a8f8b215 100644 --- a/reference/spec2rgb.html +++ b/reference/spec2rgb.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/subset.rspec.html b/reference/subset.rspec.html index 4c1be29e..34dd92f8 100644 --- a/reference/subset.rspec.html +++ b/reference/subset.rspec.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/summary.colspace.html b/reference/summary.colspace.html index a0c75987..3c1e51c5 100644 --- a/reference/summary.colspace.html +++ b/reference/summary.colspace.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/summary.rimg.html b/reference/summary.rimg.html index 072a94c2..4cdeed30 100644 --- a/reference/summary.rimg.html +++ b/reference/summary.rimg.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/summary.rspec.html b/reference/summary.rspec.html index a1157dcc..47663df5 100644 --- a/reference/summary.rspec.html +++ b/reference/summary.rspec.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/summary.vismodel.html b/reference/summary.vismodel.html index 9d488ec3..745587c5 100644 --- a/reference/summary.vismodel.html +++ b/reference/summary.vismodel.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/tcspace.html b/reference/tcspace.html index b47212a1..484bca66 100644 --- a/reference/tcspace.html +++ b/reference/tcspace.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/tcsplot.html b/reference/tcsplot.html index e56ebc87..29a11290 100644 --- a/reference/tcsplot.html +++ b/reference/tcsplot.html @@ -4,7 +4,7 @@ Plots points in a tetrahedral colour space"> +
@@ -19,7 +19,7 @@ pavo - 2.9.0 + 2.10.0
@@ -245,9 +245,9 @@

Examples

tcs.breast <- subset(tcs.sicalis, "B") tcsplot(tcs.crown, col = "blue") tcspoints(tcs.breast, col = "red") - -
- + +
+ # For plotting convex hull tcsplot(tcs.sicalis, col = "blue", size = 0.005) tcsvol(tcs.sicalis) diff --git a/reference/teal.html b/reference/teal.html index b3d67918..9aaee35c 100644 --- a/reference/teal.html +++ b/reference/teal.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/tetraplot.html b/reference/tetraplot.html index 07c98349..3ec0e900 100644 --- a/reference/tetraplot.html +++ b/reference/tetraplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/transmissiondata.html b/reference/transmissiondata.html index 236be981..d5917259 100644 --- a/reference/transmissiondata.html +++ b/reference/transmissiondata.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/triplot.html b/reference/triplot.html index 8e936d67..7c6654b7 100644 --- a/reference/triplot.html +++ b/reference/triplot.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/trispace.html b/reference/trispace.html index f6601477..62b7f175 100644 --- a/reference/trispace.html +++ b/reference/trispace.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/ttvertex.html b/reference/ttvertex.html index fd847135..80f20038 100644 --- a/reference/ttvertex.html +++ b/reference/ttvertex.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/vismodel.html b/reference/vismodel.html index 56917166..89e5dd69 100644 --- a/reference/vismodel.html +++ b/reference/vismodel.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/vissyst.html b/reference/vissyst.html index 0ecb0a6a..c46739e3 100644 --- a/reference/vissyst.html +++ b/reference/vissyst.html @@ -17,7 +17,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/vol.html b/reference/vol.html index a41e648b..1256a9be 100644 --- a/reference/vol.html +++ b/reference/vol.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0 diff --git a/reference/voloverlap.html b/reference/voloverlap.html index f74f95d9..1de60bfa 100644 --- a/reference/voloverlap.html +++ b/reference/voloverlap.html @@ -18,7 +18,7 @@ pavo - 2.9.0 + 2.10.0