Skip to content

Commit

Permalink
refactor(FeatureCtx): move class FeatureContext to Style and rename
Browse files Browse the repository at this point in the history
  • Loading branch information
ftoromanoff committed Nov 2, 2023
1 parent 221f2bf commit 2445b87
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 65 deletions.
1 change: 1 addition & 0 deletions docs/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"FeatureBuildingOptions",
"Style",
"StyleOptions",
"StyleContext",
"Label"
],

Expand Down
60 changes: 2 additions & 58 deletions src/Converter/Feature2Mesh.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,66 +7,10 @@ import Extent from 'Core/Geographic/Extent';
import Crs from 'Core/Geographic/Crs';
import OrientationUtils from 'Utils/OrientationUtils';
import Coordinates from 'Core/Geographic/Coordinates';
import { StyleContext } from 'Core/Style';

const coord = new Coordinates('EPSG:4326', 0, 0, 0);

/**
* @class
* @classdesc FeatureContext is a class to store all informations
* about context to generate the style of each FeatureGeometry.
*
* @property {Coordinates} worldCoord @private Coordinates of the FeatureGeometry in world system.
* @property {Coordinates} localCoordinates @private Are the coordinates systeme origin local or global.
* @property {boolean} isProjected @private Are the coordinates already been projected.
* @property {FeatureGeometry} geometry @private
* @property {Object} globals
* @property {Object} collection
* @property {Coordinates} coordinates
*/
export class FeatureContext {
#worldCoord = new Coordinates('EPSG:4326', 0, 0, 0);
#localCoordinates = new Coordinates('EPSG:4326', 0, 0, 0);
#isProjected = true;
#geometry = {};

constructor() {
/**
* @constructor
*/
this.globals = {};
}

setGeometry(g) {
this.#geometry = g;
}

setCollection(c) {
this.collection = c;
this.#localCoordinates.setCrs(c.crs);
}

setLocalCoordinatesFromArray(vertices, offset) {
this.#isProjected = false;
return this.#localCoordinates.setFromArray(vertices, offset);
}

get properties() {
return this.#geometry.properties;
}

get coordinates() {
if (!this.#isProjected) {
this.#isProjected = true;
this.#worldCoord.copy(this.#localCoordinates).applyMatrix4(this.collection.matrixWorld);
if (this.#localCoordinates.crs == 'EPSG:4978') {
return this.#worldCoord.as('EPSG:4326', this.#worldCoord);
}
}
return this.#worldCoord;
}
}

const context = new FeatureContext();
const context = new StyleContext();

const dim_ref = new THREE.Vector2();
const dim = new THREE.Vector2();
Expand Down
5 changes: 2 additions & 3 deletions src/Converter/Feature2Texture.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ import * as THREE from 'three';
import { FEATURE_TYPES } from 'Core/Feature';
import Extent from 'Core/Geographic/Extent';
import Coordinates from 'Core/Geographic/Coordinates';
import Style from 'Core/Style';
import { FeatureContext } from 'Converter/Feature2Mesh';
import Style, { StyleContext } from 'Core/Style';

const context = new FeatureContext();
const context = new StyleContext();

/**
* Draw polygon (contour, line edge and fill) based on feature vertices into canvas
Expand Down
56 changes: 56 additions & 0 deletions src/Core/Style.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Fetcher from 'Provider/Fetcher';
import * as mapbox from '@mapbox/mapbox-gl-style-spec';
import { Color } from 'three';
import { deltaE } from 'Renderer/Color';
import Coordinates from 'Core/Geographic/Coordinates';

import itowns_stroke_single_before from './StyleChunk/itowns_stroke_single_before.css';

Expand Down Expand Up @@ -160,6 +161,61 @@ function defineStyleProperty(style, category, name, value, defaultValue) {
style[category][name] = value;
}

/**
* @class
* @classdesc StyleContext is a class to store all informations
* about context to generate the style of each FeatureGeometry.
*
* @property {Coordinates} worldCoord @private Coordinates of the FeatureGeometry in world system.
* @property {Coordinates} localCoordinates @private Are the coordinates systeme origin local or global.
* @property {boolean} isProjected @private Are the coordinates already been projected.
* @property {FeatureGeometry} geometry @private
* @property {Object} globals
* @property {Object} collection
* @property {Coordinates} coordinates
*/
export class StyleContext {
#worldCoord = new Coordinates('EPSG:4326', 0, 0, 0);
#localCoordinates = new Coordinates('EPSG:4326', 0, 0, 0);
#isProjected = true;
#geometry = {};
/**
* @constructor
*/
constructor() {
this.globals = {};
}

setGeometry(g) {
this.#geometry = g;
}

setCollection(c) {
this.collection = c;
this.#localCoordinates.setCrs(c.crs);
}

setLocalCoordinatesFromArray(vertices, offset) {
this.#isProjected = false;
return this.#localCoordinates.setFromArray(vertices, offset);
}

properties() {
return this.#geometry.properties;
}

get coordinates() {
if (!this.#isProjected) {
this.#isProjected = true;
this.#worldCoord.copy(this.#localCoordinates).applyMatrix4(this.collection.matrixWorld);
if (this.#localCoordinates.crs == 'EPSG:4978') {
return this.#worldCoord.as('EPSG:4326', this.#worldCoord);
}
}
return this.#worldCoord;
}
}

/**
* @typedef {Object} StyleOptions
* @memberof StyleOptions
Expand Down
5 changes: 2 additions & 3 deletions src/Layer/LabelLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ import Coordinates from 'Core/Geographic/Coordinates';
import Extent from 'Core/Geographic/Extent';
import Label from 'Core/Label';
import { FEATURE_TYPES } from 'Core/Feature';
import { readExpression } from 'Core/Style';
import { readExpression, StyleContext } from 'Core/Style';
import { ScreenGrid } from 'Renderer/Label2DRenderer';
import { FeatureContext } from 'Converter/Feature2Mesh';

const context = new FeatureContext();
const context = new StyleContext();

const coord = new Coordinates('EPSG:4326', 0, 0, 0);

Expand Down
2 changes: 1 addition & 1 deletion src/Main.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export { CAMERA_TYPE } from 'Renderer/Camera';

// Internal itowns format
export { default as Feature, FeatureCollection, FeatureGeometry, FEATURE_TYPES } from 'Core/Feature';
export { default as Style } from 'Core/Style';
export { default as Style, StyleContext } from 'Core/Style';
export { default as Label } from 'Core/Label';

// Layers provided by default in iTowns
Expand Down

0 comments on commit 2445b87

Please sign in to comment.