Skip to content

Commit 72ce228

Browse files
committed
DM-10065: Client side Rotation
- the html5 canvas will now rotate the image and flip - package.json: added transformation-matrix-js - package.json: added point-in-polygon - more work in understanding how to rotate - moving viewport render calculation to TileDrawer, scroll working now - thumbnail working - new DevicePt coordinate system - removed ViewportPt coordinate system - drawing layers mostly working - select and selection related operations working with rotation - select now has a second box that shows when image is rotated, this is used for cropping and image stats - rotate dialog, rotate north using new rotation - wcs match working - target match working - time series working - compass working
1 parent bdf1a72 commit 72ce228

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2367
-2479
lines changed

package.json

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,67 @@
99
},
1010
"dependencies": {
1111
"babel-core": "^6.14.0",
12-
"babel-loader" : "^6.2.5",
13-
"babel-polyfill" : "^6.13.0 ",
12+
"babel-loader": "^6.2.5",
13+
"babel-plugin-react-transform": "^2.0.2",
14+
"babel-plugin-transform-runtime": "^6.12.0",
15+
"babel-polyfill": "^6.13.0 ",
1416
"babel-preset-es2015": "^6.14.0",
1517
"babel-preset-react": "^6.11.1",
1618
"babel-preset-stage-2": "^6.13.0",
17-
"babel-runtime" : "^6.9.2",
18-
"babel-plugin-transform-runtime": "^6.12.0",
19-
"babel-plugin-react-transform": "^2.0.2",
19+
"babel-runtime": "^6.9.2",
2020
"enum": "^2.3.0",
2121
"fixed-data-table-2": "^0.7.11",
2222
"isomorphic-fetch": "^2.2.1",
2323
"local-storage": "^1.4.2",
2424
"lodash": "^4.6.1",
2525
"numeral": "^1.5.3",
26+
"point-in-polygon": "^1.0.1",
27+
"rc-slider": "^5.1.3",
2628
"react": "^15.3.1",
27-
"react-dom": "^15.3.1",
29+
"react-addons-perf": "^15.3.1",
2830
"react-addons-pure-render-mixin": "^15.3.1",
2931
"react-addons-shallow-compare": "^15.3.1",
3032
"react-addons-update": "^15.3.1",
31-
"react-addons-perf" : "^15.3.1",
33+
"react-color": "^2.2.6",
3234
"react-component-resizable": "^1.0.1",
35+
"react-dom": "^15.3.1",
3336
"react-grid-layout": "^0.13.3",
3437
"react-highcharts": "^11.0.0",
3538
"react-split-pane": "^0.1.44",
3639
"redux": "^3.5.2",
37-
"redux-thunk": "^2.1.0",
3840
"redux-logger": "^2.6.1",
3941
"redux-saga": "^0.11.1",
42+
"redux-thunk": "^2.1.0",
43+
"shallowequal": "^0.2.2",
44+
"transformation-matrix-js": "^2.7.0",
4045
"underscore.string": "^3.2.3",
4146
"uniq": "^1.0.1",
4247
"validator": "^4.5.0",
43-
"whatwg-fetch": "^0.10.1",
44-
"react-color": "^2.2.6",
45-
"shallowequal": "^0.2.2",
46-
"rc-slider": "^5.1.3"
48+
"whatwg-fetch": "^0.10.1"
4749
},
4850
"devDependencies": {
49-
"postcss-loader": "^0.11.1",
50-
"css-loader" : "^0.19.0",
51-
"script-loader": "^0.6.1",
52-
"style-loader": "^0.12.3",
53-
"url-loader": "^0.5.7",
54-
"file-loader": "^0.9.0",
55-
"extract-text-webpack-plugin": "^0.8.0",
56-
"eslint" : "^3.4.0",
57-
"eslint-loader" : "^1.5.0",
58-
"eslint-plugin-react": "^6.2.0",
51+
"chai": "^3.5.0",
52+
"css-loader": "^0.19.0",
53+
"eslint": "^3.4.0",
54+
"eslint-loader": "^1.5.0",
55+
"eslint-plugin-jsdoc": "^2.3.1",
5956
"eslint-plugin-jsx-a11y": "^0.6.2",
60-
"eslint-plugin-jsdoc":"^2.3.1",
57+
"eslint-plugin-react": "^6.2.0",
58+
"extract-text-webpack-plugin": "^0.8.0",
59+
"file-loader": "^0.9.0",
60+
"ink-docstrap": "^1.2.1",
6161
"jsdoc": "^3.4.0",
6262
"jsdoc-jsx": "^0.1.0",
63-
"request": "^2.65.0",
6463
"mocha": "^3.1.0",
65-
"chai": "^3.5.0",
64+
"postcss-loader": "^0.11.1",
6665
"publish-release": "^1.1.0",
6766
"react-addons-test-utils": "^15.3.1",
68-
"redux-devtools": "^3.3.1",
6967
"react-redux": "^5.0.0",
70-
"webpack": "^1.13.2",
71-
"ink-docstrap" :"^1.2.1"
68+
"redux-devtools": "^3.3.1",
69+
"request": "^2.65.0",
70+
"script-loader": "^0.6.1",
71+
"style-loader": "^0.12.3",
72+
"url-loader": "^0.5.7",
73+
"webpack": "^1.13.2"
7274
}
7375
}

src/firefly/js/api/ApiUtilImage.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export {watchImageMetaData} from '../visualize/saga/ImageMetaDataWatcher.js';
4848
export {getSelectedRegion} from '../drawingLayers/RegionPlot.js';
4949

5050
export {extensionAdd, extensionRemove} from '../core/ExternalAccessUtils.js';
51-
export {makeWorldPt, makeScreenPt, makeImagePt, makeViewPortPt, parsePt} from '../visualize/Point.js';
51+
export {makeWorldPt, makeScreenPt, makeImagePt, parsePt} from '../visualize/Point.js';
5252

5353

5454
/**

src/firefly/js/core/ExternalAccessUtils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export function makePlotSelectionExtActivateData(ext, pv, dlAry) {
126126

127127
switch (ext.extType) {
128128
case AREA_SELECT:
129-
data= Object.assign(data,getTwoPointSelectObj(plot,cc,PlotAttribute.SELECTION));
129+
data= Object.assign(data,getTwoPointSelectObj(plot,cc,PlotAttribute.IMAGE_BOUNDS_SELECTION));
130130
break;
131131
case LINE_SELECT:
132132
data= Object.assign(data,getTwoPointSelectObj(plot,cc,PlotAttribute.ACTIVE_DISTANCE));

src/firefly/js/drawingLayers/Catalog.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,8 @@ function computeSelectedIdxAry(selectInfo) {
314314

315315

316316
export function selectCatalog(pv,dlAry) {
317-
var p= primePlot(pv);
318-
var sel= p.attributes[PlotAttribute.SELECTION];
317+
const p= primePlot(pv);
318+
const sel= p.attributes[PlotAttribute.SELECTION];
319319
if (!sel) return;
320320
const catDlAry= getLayers(pv,dlAry);
321321
if (catDlAry.length) {

src/firefly/js/drawingLayers/FootprintTool.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {getDrawobjArea} from '../visualize/draw/ShapeHighlight.js';
2121
import {clone} from '../util/WebUtil.js';
2222
import {getDS9Region} from '../rpc/PlotServicesJson.js';
2323
import {FootprintFactory} from '../visualize/draw/FootprintFactory.js';
24-
import {makeViewPortPt, makeImagePt} from '../visualize/Point.js';
24+
import {makeImagePt, makeDevicePt} from '../visualize/Point.js';
2525
import {get, set, isArray, has, isNil} from 'lodash';
2626
import Enum from 'enum';
2727

@@ -513,9 +513,9 @@ function getVertexDistance( footprintObj, cc) {
513513
dist = ROTATE_BOX;
514514
centerPt = getWorldOrImage(center, cc);
515515
} else {
516-
w = cc.viewPort.dim.width/2;
517-
h = cc.viewPort.dim.height/2;
518-
centerPt = getWorldOrImage(makeViewPortPt(w, h), cc);
516+
w = cc.viewDim.width/2;
517+
h = cc.viewDim.height/2;
518+
centerPt = getWorldOrImage(makeDevicePt(w, h), cc);
519519
dist = 0;
520520
}
521521
dist += Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2));

src/firefly/js/drawingLayers/MarkerTool.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {getWorldOrImage, makeMarker, findClosestIndex, updateFootprintTranslate
1717
import {getMarkerToolUIComponent} from './MarkerToolUI.jsx';
1818
import {getDrawobjArea} from '../visualize/draw/ShapeHighlight.js';
1919
import ShapeDataObj, {lengthToScreenPixel, lengthToArcsec} from '../visualize/draw/ShapeDataObj.js';
20-
import {makeViewPortPt, makeImagePt} from '../visualize/Point.js';
20+
import {makeDevicePt, makeImagePt} from '../visualize/Point.js';
2121
import {clone} from '../util/WebUtil.js';
2222
import {get, set, has, isArray} from 'lodash';
2323
import Enum from 'enum';
@@ -45,7 +45,7 @@ export var initMarkerPos = (plot, cc) => {
4545
if (!cc) cc = CsysConverter.make(plot);
4646

4747
if (!pos) {
48-
pos = makeViewPortPt(cc.viewPort.dim.width / 2, cc.viewPort.dim.height / 2);
48+
pos = makeDevicePt(cc.viewDim.width / 2, cc.viewDim.height / 2);
4949
}
5050
return getWorldOrImage(pos, cc);
5151
};
@@ -454,9 +454,9 @@ function getVertexDistance( markObj, cc) {
454454
h = lengthToScreenPixel(height, cc, ShapeDataObj.UnitType.IMAGE_PIXEL) / 2;
455455
centerPt = getWorldOrImage(center, cc);
456456
} else {
457-
w = cc.viewPort.dim.width/2;
458-
h = cc.viewPort.dim.height/2;
459-
centerPt = getWorldOrImage(makeViewPortPt(w, h), cc);
457+
w = cc.viewDim.width/2;
458+
h = cc.viewDim.height/2;
459+
centerPt = getWorldOrImage(makeDevicePt(w, h), cc);
460460
}
461461
dist = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2));
462462

src/firefly/js/drawingLayers/NorthUpCompass.js

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import DrawLayer, {ColorChangeType} from '../visualize/draw/DrawLayer.js';
1010
import CsysConverter from '../visualize/CsysConverter.js';
1111
import {makeWorldPt, makeScreenPt} from '../visualize/Point.js';
1212
import {primePlot, getPlotViewById} from '../visualize/PlotViewUtil.js';
13+
import {getTopmostVisiblePoint} from '../visualize/VisUtil.js';
1314
import {makeFactoryDef} from '../visualize/draw/DrawLayerFactory.js';
1415
import {makeDirectionArrowDrawObj} from '../visualize/draw/DirectionArrowDrawObj.js';
1516
import {dispatchAddSaga} from '../core/MasterSaga.js';
@@ -29,7 +30,8 @@ var idCnt=0;
2930

3031
function* relocateCompassSaga({id}, dispatch, getState) {
3132
while (true) {
32-
var action = yield take([ImagePlotCntlr.RECENTER, ImagePlotCntlr.PROCESS_SCROLL]);
33+
var action = yield take([ImagePlotCntlr.RECENTER, ImagePlotCntlr.PROCESS_SCROLL,
34+
ImagePlotCntlr.ROTATE_CLIENT, ImagePlotCntlr.FLIP_CLIENT]);
3335
switch (action.type) {
3436
case ImagePlotCntlr.RECENTER:
3537
case ImagePlotCntlr.PROCESS_SCROLL:
@@ -105,37 +107,43 @@ function makeCompass(plotId, action){
105107

106108
var pv= getPlotViewById(visRoot(),plotId);
107109

108-
const dist = 60;
110+
// const dist = 60;
109111
const px = 30;
110-
var textSpace = {x: 8, y: 15};
111-
const yOff = Math.min(Math.min(plot.viewPort.dim.height, pv.viewDim.height)/4, dist);
112-
const xOff = Math.min(Math.min(plot.viewPort.dim.width, pv.viewDim.width)/4, dist);
113-
const offStart = Math.min(xOff, yOff);
112+
// var textSpace = {x: 8, y: 15};
113+
// const yOff = Math.min(Math.min(plot.screenSize.height, pv.viewDim.height)/4, dist);
114+
// const xOff = Math.min(Math.min(plot.screenSize.width, pv.viewDim.width)/4, dist);
115+
// const offStart = Math.min(xOff, yOff);
116+
117+
// const {screenSize} = plot;
118+
// const {viewDim} = pv;
119+
120+
// var compassAt = (scroll, widthHeight, xY) => {
121+
// var compassAt;
122+
//
123+
//
124+
// if (scroll < 0) { // viewport origin is inside viewDim
125+
// var border = scroll + viewDim[widthHeight];
126+
//
127+
// compassAt = offStart;
128+
// if (compassAt > border) {
129+
// compassAt = Math.max(border, px + textSpace[xY]);
130+
// }
131+
// } else {
132+
// compassAt = Math.min(scroll + offStart, (screenSize[widthHeight] - textSpace.x));
133+
// }
134+
// return compassAt;
135+
// };
136+
//
137+
// const sy = compassAt(pv.scrollY, 'height', 'y');
138+
// const sx = compassAt(pv.scrollX, 'width', 'x');
139+
//
140+
// var sptStart = makeScreenPt(sx, sy);
141+
142+
143+
const sptStart= cc.getScreenCoords(getTopmostVisiblePoint(pv, 55, 55));
144+
if (!sptStart) return null;
114145

115-
const {viewPort} = plot;
116-
const {viewDim} = pv;
117146

118-
var compassAt = (scroll, widthHeight, xY) => {
119-
var compassAt;
120-
121-
122-
if (scroll < 0) { // viewport origin is inside viewDim
123-
var border = scroll + viewDim[widthHeight];
124-
125-
compassAt = viewPort[xY] + offStart;
126-
if (compassAt > border) {
127-
compassAt = Math.max(border, viewPort[xY] + px + textSpace[xY]);
128-
}
129-
} else { // viewPort origin is outside viewDim
130-
compassAt = Math.min(scroll + offStart, (viewPort[xY] + viewPort.dim[widthHeight] - textSpace.x));
131-
}
132-
return compassAt;
133-
};
134-
135-
const sy = compassAt(pv.scrollY, 'height', 'y');
136-
const sx = compassAt(pv.scrollX, 'width', 'x');
137-
138-
var sptStart = makeScreenPt(sx, sy);
139147
var wpStart= cc.getWorldCoords(sptStart);
140148
var cdelt1 = cc.getImagePixelScaleInDeg();
141149
var zf= cc.zoomFactor || 1;

0 commit comments

Comments
 (0)