Skip to content

Commit c2590c9

Browse files
committed
add concatenate operation 3d (#14)
1 parent 81eaedb commit c2590c9

14 files changed

+198
-22
lines changed

src/assets/image/Concatenate.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/layer/merge/MergedLayer.js renamed to src/layer/abstract/MergedLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { CloseButton } from "../../elements/CloseButton";
22
import { LineGroupGeometry } from "../../elements/LineGroupGeometry";
33
import { BasicMaterialOpacity } from "../../utils/Constant";
4-
import { MergeLineGroupController } from "./MergeLineGroupController";
4+
import { MergeLineGroupController } from "./MergedLineGroupController";
55

66
function MergedLayer(config) {
77

File renamed without changes.
File renamed without changes.

src/layer/merge/MergedLayer3d.js renamed to src/layer/abstract/MergedLayer3d.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { MapTransitionFactory } from "../../animation/MapTransitionTween";
66
import { CloseButtonRatio } from "../../utils/Constant";
77
import { MergedAggregation } from "../../elements/MergedAggregation";
88
import { MergedFeatureMap } from "../../elements/MergedFeatureMap";
9-
import {StrategyFactory} from "./strategy/StrategyFactory";
9+
import {StrategyFactory} from "../merge/strategy/StrategyFactory";
1010

1111
function MergedLayer3d(config) {
1212

File renamed without changes.

src/layer/merge/Add.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {MergedLayer3d} from "./MergedLayer3d";
1+
import {MergedLayer3d} from "../abstract/MergedLayer3d";
22

33
function Add(layerList) {
44

src/layer/merge/Concatenate.js

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,52 @@
1+
import { MergedLayer3d } from "../abstract/MergedLayer3d";
2+
13
function Concatenate(layerList) {
24

5+
let operatorType = "concatenate";
36

7+
validate(layerList);
48

5-
}
9+
return createMergedLayer(layerList);
10+
11+
function validate(layerList) {
12+
13+
let depth;
14+
15+
if (layerList.length > 0) {
16+
depth = layerList[0].layerDimension;
17+
} else {
18+
console.error("Merge Layer missing elements.");
19+
}
20+
21+
for (let i = 0; i < layerList.length; i++) {
22+
23+
if (layerList[i].layerDimension !== depth) {
24+
console.error("Can not add layer with different depth.");
25+
}
26+
27+
}
628

7-
Concatenate.prototype = {
29+
}
830

9-
};
31+
function createMergedLayer(layerList) {
32+
33+
if (layerList[0].layerDimension === 1) {
34+
35+
} else if (layerList[0].layerDimension === 2) {
36+
37+
} else if (layerList[0].layerDimension === 3) {
38+
39+
return new MergedLayer3d({
40+
operator: operatorType,
41+
mergedElements: layerList
42+
});
43+
44+
} else {
45+
console.error("Do not support layer concatenate operation more than 4 dimension.");
46+
}
47+
48+
}
49+
50+
}
1051

1152
export { Concatenate };

src/layer/merge/strategy/AddStrategy3d.js renamed to src/layer/merge/strategy/Add3d.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
1-
function AddStrategy3d(mergedElements) {
1+
function Add3d(mergedElements) {
22

33
this.mergedElements = mergedElements;
44
this.layerIndex = undefined;
55

66
}
77

8-
AddStrategy3d.prototype = {
8+
Add3d.prototype = {
99

1010
setLayerIndex: function(layerIndex) {
1111
this.layerIndex = layerIndex;
1212
},
1313

1414
validate: function() {
1515

16-
let inputShape;
17-
18-
if (this.mergedElements.length > 0) {
19-
inputShape = this.mergedElements[0].outputShape;
20-
} else {
21-
console.error("Merge Layer missing elements.");
22-
}
16+
let inputShape = this.mergedElements[0].outputShape;
2317

2418
for (let i = 0; i < this.mergedElements.length; i++) {
2519

@@ -124,4 +118,4 @@ AddStrategy3d.prototype = {
124118

125119
};
126120

127-
export { AddStrategy3d };
121+
export { Add3d };
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
function Concatenate3d(mergedElements) {
2+
3+
this.mergedElements = mergedElements;
4+
this.layerIndex = undefined;
5+
6+
}
7+
8+
Concatenate3d.prototype = {
9+
10+
setLayerIndex: function(layerIndex) {
11+
this.layerIndex = layerIndex;
12+
},
13+
14+
validate: function() {
15+
16+
let inputShape = this.mergedElements[0].outputShape;
17+
18+
for (let i = 0; i < this.mergedElements.length; i++) {
19+
20+
let layerShape = this.mergedElements[i].outputShape;
21+
if (layerShape[0] !== inputShape[0] || layerShape[1] !== inputShape[1]) {
22+
return false;
23+
}
24+
25+
}
26+
27+
return true;
28+
29+
},
30+
31+
getShape: function() {
32+
33+
let width = this.mergedElements[0].outputShape[0];
34+
let height = this.mergedElements[0].outputShape[1];
35+
36+
let depth = 0;
37+
for (let i = 0; i < this.mergedElements.length; i++) {
38+
39+
depth += this.mergedElements[i].outputShape[2];
40+
41+
}
42+
43+
return [width, height, depth];
44+
45+
},
46+
47+
getRelativeElements: function(selectedElement) {
48+
49+
let curveElements = [];
50+
let straightElements = [];
51+
52+
if (selectedElement.elementType === "aggregationElement") {
53+
54+
let request = {
55+
all: true
56+
};
57+
58+
for (let i = 0; i < this.mergedElements.length; i++) {
59+
let relativeResult = this.mergedElements[i].provideRelativeElements(request);
60+
let relativeElements = relativeResult.elementList;
61+
if (this.mergedElements[i].layerIndex === this.layerIndex - 1) {
62+
63+
for (let j = 0; j < relativeElements.length; j++) {
64+
straightElements.push(relativeElements[j]);
65+
}
66+
67+
} else {
68+
69+
if (relativeResult.isOpen) {
70+
for (let j = 0; j < relativeElements.length; j++) {
71+
straightElements.push(relativeElements[j]);
72+
}
73+
} else {
74+
for (let j = 0; j < relativeElements.length; j++) {
75+
curveElements.push(relativeElements[j]);
76+
}
77+
}
78+
79+
}
80+
}
81+
82+
} else if (selectedElement.elementType === "featureMap") {
83+
84+
let fmIndex = selectedElement.fmIndex;
85+
86+
let relativeLayer;
87+
88+
for (let i = 0; i < this.mergedElements.length; i++) {
89+
90+
let layerDepth = this.mergedElements[i].outputShape[2];
91+
if (layerDepth >= fmIndex) {
92+
relativeLayer = this.mergedElements[i];
93+
break;
94+
} else {
95+
fmIndex -= layerDepth;
96+
}
97+
98+
}
99+
100+
let request = {
101+
index: fmIndex
102+
};
103+
104+
let relativeResult = relativeLayer.provideRelativeElements(request);
105+
let relativeElements = relativeResult.elementList;
106+
if (relativeLayer.layerIndex === this.layerIndex - 1) {
107+
108+
for (let i = 0; i < relativeElements.length; i++) {
109+
straightElements.push(relativeElements[i]);
110+
}
111+
112+
} else {
113+
114+
if (relativeResult.isOpen) {
115+
for (let i = 0; i < relativeElements.length; i++) {
116+
straightElements.push(relativeElements[i]);
117+
}
118+
} else {
119+
for (let i = 0; i < relativeElements.length; i++) {
120+
curveElements.push(relativeElements[i]);
121+
}
122+
}
123+
124+
}
125+
126+
}
127+
128+
return {
129+
straight: straightElements,
130+
curve: curveElements
131+
};
132+
133+
}
134+
135+
};
136+
137+
export { Concatenate3d };

0 commit comments

Comments
 (0)