This commit is contained in:
2912401452 2021-09-02 13:54:08 +08:00
commit a0b1af5644
9 changed files with 26 additions and 8 deletions

View File

@ -57,6 +57,7 @@ export interface ILayerModelInitializationOptions {
vertexShader: string;
fragmentShader: string;
triangulation: Triangulation;
segmentNumber?: number;
}
export interface ILayerModel {

View File

@ -161,6 +161,7 @@ export interface IStyleAttribute extends IStyleAttributeInitializationOptions {
export type Triangulation = (
feature: IEncodeFeature,
segmentNumber?: number,
) => {
vertices: number[];
indices: number[];
@ -197,6 +198,7 @@ export interface IStyleAttributeService {
createAttributesAndIndices(
encodedFeatures: IEncodeFeature[],
triangulation?: Triangulation,
segmentNumber?: number,
): {
attributes: {
[attributeName: string]: IAttribute;

View File

@ -187,6 +187,7 @@ export default class StyleAttributeService implements IStyleAttributeService {
public createAttributesAndIndices(
features: IEncodeFeature[],
triangulation: Triangulation,
segmentNumber: number,
): {
attributes: {
[attributeName: string]: IAttribute;
@ -217,7 +218,7 @@ export default class StyleAttributeService implements IStyleAttributeService {
vertices: verticesForCurrentFeature,
normals: normalsForCurrentFeature,
size: vertexSize,
} = this.triangulation(feature);
} = this.triangulation(feature, segmentNumber);
indicesForCurrentFeature.forEach((i) => {
indices.push(i + verticesNum);
});

View File

@ -858,6 +858,7 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter
vertexShader,
fragmentShader,
triangulation,
segmentNumber,
...rest
} = options;
this.shaderModuleService.registerModule(moduleName, {
@ -872,6 +873,7 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter
} = this.styleAttributeService.createAttributesAndIndices(
this.encodedData,
triangulation,
segmentNumber,
);
return createModel({
attributes,

View File

@ -202,8 +202,11 @@ export function RasterImageTriangulation(feature: IEncodeFeature) {
* @param feature
* @param segNum 线线
*/
export function LineArcTriangulation(feature: IEncodeFeature) {
const segNum = 30;
export function LineArcTriangulation(
feature: IEncodeFeature,
segmentNumber?: number,
) {
const segNum = segmentNumber ? segmentNumber : 30;
const coordinates = feature.coordinates as IPosition[];
const positions = [];
const indexArray = [];

View File

@ -33,6 +33,7 @@ export default class ArcModel extends BaseModel {
forward = true,
lineTexture = false,
iconStep = 100,
segmentNumber = 30,
} = this.layer.getLayerConfig() as ILineLayerStyleOptions;
if (this.dataTextureTest && this.dataTextureNeedUpdate({ opacity })) {
@ -89,7 +90,7 @@ export default class ArcModel extends BaseModel {
u_opacity: isNumber(opacity) ? opacity : 1.0,
u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,
segmentNumber: 30,
segmentNumber,
u_line_type: lineStyleObj[lineType || 'solid'],
u_dash_array: dashArray,
u_blur: 0.9,
@ -131,6 +132,10 @@ export default class ArcModel extends BaseModel {
}
public buildModels(): IModel[] {
const {
segmentNumber = 30,
} = this.layer.getLayerConfig() as ILineLayerStyleOptions;
return [
this.layer.buildLayerModel({
moduleName: 'arc2dline',
@ -139,6 +144,7 @@ export default class ArcModel extends BaseModel {
triangulation: LineArcTriangulation,
depth: { enable: false },
blend: this.getBlend(),
segmentNumber,
}),
];
}

View File

@ -31,6 +31,7 @@ export default class Arc3DModel extends BaseModel {
dashArray = [10, 5],
lineTexture = false,
iconStep = 100,
segmentNumber = 30,
} = this.layer.getLayerConfig() as ILineLayerStyleOptions;
if (dashArray.length === 2) {
@ -87,7 +88,7 @@ export default class Arc3DModel extends BaseModel {
// u_opacity: opacity === undefined ? 1 : opacity,
u_opacity: isNumber(opacity) ? opacity : 1.0,
u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,
segmentNumber: 30,
segmentNumber,
u_line_type: lineStyleObj[lineType as string] || 0.0,
u_dash_array: dashArray,

View File

@ -34,6 +34,7 @@ export default class GreatCircleModel extends BaseModel {
dashArray = [10, 5],
lineTexture = false,
iconStep = 100,
segmentNumber = 30,
} = this.layer.getLayerConfig() as Partial<ILineLayerStyleOptions>;
// console.log('opacity', opacity)
if (dashArray.length === 2) {
@ -90,7 +91,7 @@ export default class GreatCircleModel extends BaseModel {
// u_opacity: opacity === undefined ? 1 : opacity,
u_opacity: isNumber(opacity) ? opacity : 1.0,
u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,
segmentNumber: 30,
segmentNumber,
u_line_type: lineStyleObj[lineType as string] || 0.0,
u_dash_array: dashArray,

View File

@ -44,8 +44,9 @@ export default class Amap2demo_arcLine extends React.Component {
.style({
opacity: 0.8,
blur: 0.99,
lineType: 'dash',
dashArray: [5, 5],
segmentNumber: 3,
// lineType: 'dash',
// dashArray: [5, 5],
});
// .forward(false)
scene.addLayer(layer);