Commit 05da1b4dde5abfa6c3d36b8d2f6cb183dd0129ea
1 parent
e8cefd97
Exists in
master
and in
66 other branches
Draw instant plot preview
Showing
2 changed files
with
182 additions
and
13 deletions
Show diff stats
src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php
@@ -15,6 +15,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -15,6 +15,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
15 | private $interactiveMultiPlotState = array(); | 15 | private $interactiveMultiPlotState = array(); |
16 | private $interactiveTimeSelectionState = array(); | 16 | private $interactiveTimeSelectionState = array(); |
17 | private $interactiveCrtTTFileIndex = -1; | 17 | private $interactiveCrtTTFileIndex = -1; |
18 | + private $interactivePreview = false; | ||
18 | 19 | ||
19 | /* | 20 | /* |
20 | * @brief method to unmarshall a plot request | 21 | * @brief method to unmarshall a plot request |
@@ -206,14 +207,14 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -206,14 +207,14 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
206 | 207 | ||
207 | switch ($tab->{'page-mode'}) | 208 | switch ($tab->{'page-mode'}) |
208 | { | 209 | { |
209 | - case 'color' : | ||
210 | - $pageNode->setMode(RequestOutputPlotPageModeEnum::COLOR); | ||
211 | - break; | 210 | + |
212 | case 'grayscale' : | 211 | case 'grayscale' : |
213 | $pageNode->setMode(RequestOutputPlotPageModeEnum::GRAYSCALE); | 212 | $pageNode->setMode(RequestOutputPlotPageModeEnum::GRAYSCALE); |
214 | break; | 213 | break; |
214 | + case 'color' : | ||
215 | default: | 215 | default: |
216 | - throw new Exception('Page mode not implemented.'); | 216 | + $pageNode->setMode(RequestOutputPlotPageModeEnum::COLOR); |
217 | + break; | ||
217 | } | 218 | } |
218 | 219 | ||
219 | if ($tab->{'page-margins-activated'}) | 220 | if ($tab->{'page-margins-activated'}) |
@@ -250,6 +251,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -250,6 +251,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
250 | $this->interactiveRequestRealIndexes[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $tabRequestIndex; | 251 | $this->interactiveRequestRealIndexes[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $tabRequestIndex; |
251 | $this->interactiveMultiPlotState[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $tab->{'multi-plot-linked'}; | 252 | $this->interactiveMultiPlotState[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $tab->{'multi-plot-linked'}; |
252 | $this->interactiveTimeSelectionState[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $isIntervalRequest; | 253 | $this->interactiveTimeSelectionState[PLOT_RESULT_FILE_KEY."_".$tab->{'id'}] = $isIntervalRequest; |
254 | + $this->interactivePreview = isset($input->{'interactive-preview'}) && ($input->{'interactive-preview'}); | ||
253 | $this->paramsData->addWaitingResult(PLOT_RESULT_FILE_KEY."_".$tab->{'id'}, $waitingResultFile); | 255 | $this->paramsData->addWaitingResult(PLOT_RESULT_FILE_KEY."_".$tab->{'id'}, $waitingResultFile); |
254 | } | 256 | } |
255 | else | 257 | else |
@@ -513,7 +515,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -513,7 +515,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
513 | } | 515 | } |
514 | 516 | ||
515 | //reverse axis | 517 | //reverse axis |
516 | - $axisNode->setReverse($axisData->{'axis-reverse'} ? "true" : "false"); | 518 | + if (isset($axisData->{'axis-reverse'})) |
519 | + $axisNode->setReverse($axisData->{'axis-reverse'} ? "true" : "false"); | ||
517 | 520 | ||
518 | //axis scale | 521 | //axis scale |
519 | switch ($axisData->{'axis-scale'}) | 522 | switch ($axisData->{'axis-scale'}) |
@@ -528,7 +531,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -528,7 +531,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
528 | //axis range | 531 | //axis range |
529 | if ($axisData->{'axis-range-min'} < $axisData->{'axis-range-max'}) | 532 | if ($axisData->{'axis-range-min'} < $axisData->{'axis-range-max'}) |
530 | $axisNode->getRange()->setMinMax($axisData->{'axis-range-min'}, $axisData->{'axis-range-max'}); | 533 | $axisNode->getRange()->setMinMax($axisData->{'axis-range-min'}, $axisData->{'axis-range-max'}); |
531 | - $axisNode->getRange()->setExtend($axisData->{'axis-range-extend'} ? "true" : "false"); | 534 | + if (isset($axisData->{'axis-range-extend'})) |
535 | + $axisNode->getRange()->setExtend($axisData->{'axis-range-extend'} ? "true" : "false"); | ||
532 | 536 | ||
533 | //axis color | 537 | //axis color |
534 | $axisNode->setColor($this->hexColor2KernelColor($axisData->{'axis-color'})); | 538 | $axisNode->setColor($this->hexColor2KernelColor($axisData->{'axis-color'})); |
@@ -547,20 +551,26 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -547,20 +551,26 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
547 | } | 551 | } |
548 | 552 | ||
549 | //axis minor and major grid | 553 | //axis minor and major grid |
550 | - $axisNode->getTick()->setMinorGrid($axisData->{'axis-grid-minor'} ? "true" : "false"); | ||
551 | - $axisNode->getTick()->setMajorGrid($axisData->{'axis-grid-major'} ? "true" : "false"); | 554 | + if (isset($axisData->{'axis-grid-minor'})) |
555 | + $axisNode->getTick()->setMinorGrid($axisData->{'axis-grid-minor'} ? "true" : "false"); | ||
556 | + if (isset($axisData->{'axis-grid-major'})) | ||
557 | + $axisNode->getTick()->setMajorGrid($axisData->{'axis-grid-major'} ? "true" : "false"); | ||
552 | 558 | ||
553 | //legend | 559 | //legend |
554 | - if ($axisData->{'axis-legend-text'} != '') | 560 | + if (isset($axisData->{'axis-legend-text'}) && $axisData->{'axis-legend-text'} != '') |
561 | + { | ||
555 | $axisNode->getLegend()->setText($axisData->{'axis-legend-text'}); | 562 | $axisNode->getLegend()->setText($axisData->{'axis-legend-text'}); |
556 | - $axisNode->getLegend()->setColor($this->hexColor2KernelColor($axisData->{'axis-legend-color'})); | ||
557 | - $this->unmarshallLabel($axisData, "axis-legend", $axisNode->getLegend()); | 563 | + $axisNode->getLegend()->setColor($this->hexColor2KernelColor($axisData->{'axis-legend-color'})); |
564 | + $this->unmarshallLabel($axisData, "axis-legend", $axisNode->getLegend()); | ||
565 | + } | ||
558 | 566 | ||
559 | //Show legend | 567 | //Show legend |
560 | - $axisNode->setShowLegend($axisData->{'axis-legend-activated'} ? "true" : "false"); | 568 | + if (isset($axisData->{'axis-legend-activated'})) |
569 | + $axisNode->setShowLegend($axisData->{'axis-legend-activated'} ? "true" : "false"); | ||
561 | 570 | ||
562 | //Show tick marks | 571 | //Show tick marks |
563 | - $axisNode->setShowTickMarks($axisData->{'axis-tick-showmarks'} ? "true" : "false"); | 572 | + if (isset($axisData->{'axis-tick-showmarks'})) |
573 | + $axisNode->setShowTickMarks($axisData->{'axis-tick-showmarks'} ? "true" : "false"); | ||
564 | 574 | ||
565 | //Add constants | 575 | //Add constants |
566 | if ($constantAxisId != '') | 576 | if ($constantAxisId != '') |
@@ -1382,6 +1392,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -1382,6 +1392,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
1382 | "id" => $key, | 1392 | "id" => $key, |
1383 | "index" => $this->interactiveRequestRealIndexes[$key], | 1393 | "index" => $this->interactiveRequestRealIndexes[$key], |
1384 | "multiplot" => $this->interactiveMultiPlotState[$key], | 1394 | "multiplot" => $this->interactiveMultiPlotState[$key], |
1395 | + "preview" => $this->interactivePreview, | ||
1385 | "isInterval" => $this->interactiveTimeSelectionState[$key], | 1396 | "isInterval" => $this->interactiveTimeSelectionState[$key], |
1386 | "ttFileIndex" => $this->interactiveCrtTTFileIndex, | 1397 | "ttFileIndex" => $this->interactiveCrtTTFileIndex, |
1387 | "context" => IHMPlotContextFileClass::parse($this->getWorkingPath().$contextResult), | 1398 | "context" => IHMPlotContextFileClass::parse($this->getWorkingPath().$contextResult), |
@@ -1469,6 +1480,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -1469,6 +1480,8 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
1469 | return $this->unmarshallTTGoto($actionInput, $plotInput); | 1480 | return $this->unmarshallTTGoto($actionInput, $plotInput); |
1470 | case 'synchronize' : | 1481 | case 'synchronize' : |
1471 | return $this->unmarshallSynchronize($actionInput, $plotInput); | 1482 | return $this->unmarshallSynchronize($actionInput, $plotInput); |
1483 | + case 'instant' : | ||
1484 | + return $this->unmarshallInstant($actionInput, $plotInput); | ||
1472 | default : | 1485 | default : |
1473 | throw new Exception('Interactive action not implemented.'); | 1486 | throw new Exception('Interactive action not implemented.'); |
1474 | } | 1487 | } |
@@ -1688,5 +1701,158 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -1688,5 +1701,158 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
1688 | $this->saveIHMRequest($plotInput); | 1701 | $this->saveIHMRequest($plotInput); |
1689 | return $plotInput; | 1702 | return $plotInput; |
1690 | } | 1703 | } |
1704 | + | ||
1705 | + private function unmarshallInstant($input, $plotInput) | ||
1706 | + { | ||
1707 | + //Find current tab | ||
1708 | + $crtTab = NULL; | ||
1709 | + foreach ($plotInput->{'tabs'} as $tab) | ||
1710 | + { | ||
1711 | + if ($input->{'tabId'} == PLOT_RESULT_FILE_KEY."_".$tab->{'id'}) | ||
1712 | + { | ||
1713 | + $crtTab = $tab; | ||
1714 | + break; | ||
1715 | + } | ||
1716 | + } | ||
1717 | + | ||
1718 | + if (!$crtTab) | ||
1719 | + throw new Exception('Cannot retrieve plot tab for instant plot.'); | ||
1720 | + | ||
1721 | + //Find current panel | ||
1722 | + $crtPanel = NULL; | ||
1723 | + foreach ($crtTab->{'panels'} as $panel) | ||
1724 | + { | ||
1725 | + if ($input->{'panelId'} == $panel->{'id'}) | ||
1726 | + { | ||
1727 | + $crtPanel = $panel; | ||
1728 | + break; | ||
1729 | + } | ||
1730 | + } | ||
1731 | + | ||
1732 | + if (!$crtPanel) | ||
1733 | + throw new Exception('Cannot retrieve plot panel for instant plot.'); | ||
1734 | + | ||
1735 | + if ($crtPanel->{'panel-plot-type'} != 'timePlot') | ||
1736 | + throw new Exception('Instant plot action only available for Time plot.'); | ||
1737 | + | ||
1738 | + //Find spectra parameter | ||
1739 | + $crtParam = NULL; | ||
1740 | + foreach ($crtPanel->{'params'} as $param) | ||
1741 | + { | ||
1742 | + if ($param->{'param-drawing-type'} == 'spectro') | ||
1743 | + { | ||
1744 | + $crtParam = $param; | ||
1745 | + break; | ||
1746 | + } | ||
1747 | + } | ||
1748 | + | ||
1749 | + if (!$crtParam) | ||
1750 | + throw new Exception('Cannot retrieve plot param for instant plot.'); | ||
1751 | + | ||
1752 | + //Find table Y-axis | ||
1753 | + $crtYAxis = NULL; | ||
1754 | + foreach ($crtPanel->{'axes'} as $axis) | ||
1755 | + { | ||
1756 | + if ($crtParam->{'param-drawing-object'}->{'spectro-yaxis'} == $axis->{'id'}) | ||
1757 | + { | ||
1758 | + $crtYAxis = $axis; | ||
1759 | + break; | ||
1760 | + } | ||
1761 | + } | ||
1762 | + | ||
1763 | + if (!$crtYAxis) | ||
1764 | + throw new Exception('Cannot retrieve plot y Axis for instant plot.'); | ||
1765 | + | ||
1766 | + //Find color Z-axis | ||
1767 | + $crtColorAxis = NULL; | ||
1768 | + foreach ($crtPanel->{'axes'} as $axis) | ||
1769 | + { | ||
1770 | + if ($axis->{'id'} == 'color') | ||
1771 | + { | ||
1772 | + $crtColorAxis = $axis; | ||
1773 | + break; | ||
1774 | + } | ||
1775 | + } | ||
1776 | + | ||
1777 | + if (!$crtColorAxis) | ||
1778 | + throw new Exception('Cannot retrieve plot color Axis for instant plot.'); | ||
1779 | + | ||
1780 | + date_default_timezone_set('UTC'); | ||
1781 | + $timeStamp = strtotime($input->time); | ||
1782 | + | ||
1783 | + $instantPlotInput = (Object)array( | ||
1784 | + "interactive-preview" => true, | ||
1785 | + "file-format" => "PNG", | ||
1786 | + "file-output" => "INTERACTIVE", | ||
1787 | + "file-prefix" => "instant", | ||
1788 | + "last-plotted-tab"=> 1, | ||
1789 | + "timesrc" => "Interval", | ||
1790 | + "startDate" => date("Y-m-dTH:i:s", $timeStamp - 3600), | ||
1791 | + "stopDate" => date("Y-m-dTH:i:s", $timeStamp + 3600), | ||
1792 | + "tabs" => array() | ||
1793 | + ); | ||
1794 | + | ||
1795 | + $instantTab = (Object)array( | ||
1796 | + "id" => 1, | ||
1797 | + "multi-plot-linked" => true, | ||
1798 | + "page-margins-activated" => $crtTab->{"page-margins-activated"}, | ||
1799 | + "page-margin-x" => $crtTab->{"page-margin-x"}, | ||
1800 | + "page-margin-y" => $crtTab->{"page-margin-y"}, | ||
1801 | + "page-orientation" => $crtTab->{"page-orientation"}, | ||
1802 | + "page-dimension" => $crtTab->{"page-dimension"}, | ||
1803 | + "page-layout-type" => "vertical", | ||
1804 | + "page-layout-object" => (Object)array( | ||
1805 | + "layout-expand" => true, | ||
1806 | + "layout-panel-height" => 0.5, | ||
1807 | + "layout-panel-spacing" => 0.05 | ||
1808 | + ), | ||
1809 | + "panels" => array() | ||
1810 | + ); | ||
1811 | + | ||
1812 | + $instantPanel = (Object)array( | ||
1813 | + "id" => "1", | ||
1814 | + "panel-plot-type" => "instantPlot", | ||
1815 | + "panel-instant-time" => $input->time, | ||
1816 | + "axes" => array(), | ||
1817 | + "params" => array() | ||
1818 | + ); | ||
1819 | + | ||
1820 | + $instantXAxis = (Object)array( | ||
1821 | + "id" => "xaxis_id", | ||
1822 | + "axis-type" => "x", | ||
1823 | + "axis-scale" => $crtYAxis->{"axis-scale"}, | ||
1824 | + "axis-thickness" => 1 | ||
1825 | + ); | ||
1826 | + | ||
1827 | + $instantYAxis = (Object)array( | ||
1828 | + "id" => "y-left", | ||
1829 | + "axis-type" => "y-left", | ||
1830 | + "axis-scale" => $crtColorAxis->{"axis-scale"}, | ||
1831 | + "axis-thickness" => 1 | ||
1832 | + ); | ||
1833 | + $instantPanel->{"axes"}[] = $instantXAxis; | ||
1834 | + $instantPanel->{"axes"}[] = $instantYAxis; | ||
1835 | + | ||
1836 | + $instantParam = (Object)array( | ||
1837 | + "id" => 1, | ||
1838 | + "param-id" => $crtParam->{'param-id'}, | ||
1839 | + "param-drawing-type" => "iserie", | ||
1840 | + "param-drawing-object" => (Object)array( | ||
1841 | + "iserie-tableonx" => true, | ||
1842 | + "iserie-lines-activated" => true, | ||
1843 | + "iserie-lines-style" => "plain", | ||
1844 | + "iserie-lines-width" => 1, | ||
1845 | + "iserie-lines-color" => "auto" | ||
1846 | + ) | ||
1847 | + ); | ||
1848 | + $instantPanel->{"params"}[] = $instantParam; | ||
1849 | + | ||
1850 | + $instantTab->{"panels"}[] = $instantPanel; | ||
1851 | + | ||
1852 | + $instantPlotInput->{"tabs"}[] = $instantTab; | ||
1853 | + | ||
1854 | + | ||
1855 | + return $instantPlotInput; | ||
1856 | + } | ||
1691 | } | 1857 | } |
1692 | ?> | 1858 | ?> |
1693 | \ No newline at end of file | 1859 | \ No newline at end of file |
src/InputOutput/IHMImpl/Tools/IHMPlotContextFileClass.php
@@ -83,6 +83,9 @@ class IHMPlotContextFileClass { | @@ -83,6 +83,9 @@ class IHMPlotContextFileClass { | ||
83 | $panelContext['plotArea']['width'] = intval($plotAreaNode->getAttribute('width')); | 83 | $panelContext['plotArea']['width'] = intval($plotAreaNode->getAttribute('width')); |
84 | } | 84 | } |
85 | 85 | ||
86 | + //hasSpectro | ||
87 | + $panelContext['plotArea']['hasSpectro'] = ($plotAreaNode->getAttribute('hasSpectro') == "true"); | ||
88 | + | ||
86 | //<axis> | 89 | //<axis> |
87 | $panelContext['plotArea']['axes'] = array(); | 90 | $panelContext['plotArea']['axes'] = array(); |
88 | 91 |