gis-view-webgl2 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -9
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +112 -17
- package/dist/index.js +1 -1
- package/docs/AI/345/257/271/350/257/235/346/261/207/346/200/273.md +34 -0
- package/docs/GisView.md +3 -3
- package/docs/ai/06-/344/274/232/350/257/235/347/264/242/345/274/225/344/270/216/345/244/215/346/237/245/346/226/271/346/263/225.md +30 -0
- package/docs/api/index.html +22 -8
- package/docs/demos/ApiCoverageDemo.vue +1 -1
- package/docs/demos/ExtensionDemo.vue +69 -12
- package/docs/demos/SearchFilterDemo.vue +13 -11
- package/docs/demos/api-index.js +13 -9
- package/docs/demos/demos.js +1 -1
- package/docs/demos/gis-view-demo/GisViewDemoCardHeader.vue +1 -0
- package/docs/demos/gis-view-demo/panels/OpsPanels.vue +2 -2
- package/docs/demos/gis-view-demo/useGisViewDemo.js +9 -9
- package/docs/index.html +41 -4
- package/docs/manual/03-/351/205/215/347/275/256/351/241/271.md +18 -3
- package/docs/manual/04-/344/272/213/344/273/266/344/270/216/345/233/236/350/260/203.md +7 -6
- package/docs/manual/08-/351/200/211/344/270/255/344/270/216/346/213/220/347/202/271.md +24 -3
- package/docs/manual/14-/350/247/206/345/233/276/344/270/216/347/255/233/351/200/211.md +90 -34
- package/docs/manual/15-/345/257/274/345/207/272/344/270/216/351/233/206/346/210/220.md +32 -3
- package/docs/manual/16-/345/256/236/344/276/213/346/226/271/346/263/225/346/200/273/350/241/250.md +7 -4
- package/docs/manual/17-/345/217/202/346/225/260/351/200/237/346/237/245.md +9 -6
- package/docs/manual/18-/351/200/220/346/226/271/346/263/225/347/244/272/344/276/213.md +39 -7
- package/docs/manual/19-/350/257/273/346/225/260/344/270/216/346/213/226/346/213/275/351/242/204/350/247/210.md +3 -3
- package/docs/manual/21-/350/257/264/346/230/216/344/270/216/345/270/270/350/247/201/351/227/256/351/242/230.md +6 -3
- package/docs/steps/README.md +7 -7
- package/docs/steps/selftest-demos.html +26 -9
- package/docs/steps/selftest-docs.html +33 -4
- package/docs/steps/selftest-features.html +91 -10
- package/docs/steps/selftest-scale.html +98 -0
- package/docs/steps/selftest-select.html +90 -0
- package/package.json +1 -1
|
@@ -558,6 +558,96 @@
|
|
|
558
558
|
window.Image = nativeImage
|
|
559
559
|
dualView.destroy()
|
|
560
560
|
dualHost.remove()
|
|
561
|
+
|
|
562
|
+
/* ---------- 本轮:SVG 导出的描边色,以及 selectTrigger 单击 / 双击 ---------- */
|
|
563
|
+
const svgStrokeHost = document.createElement('div')
|
|
564
|
+
document.body.append(svgStrokeHost)
|
|
565
|
+
const strokeIcon = { type: 'svg', path: 'M3 8 L13 8', viewBox: [0, 0, 16, 16], fill: 'none', stroke: 'currentStrokeColor', strokeWidth: 4, tint: true }
|
|
566
|
+
const svgStrokeView = createGisView(svgStrokeHost, {
|
|
567
|
+
points: [{ id: 'stroke-a', x: 0, y: 0, symbol: strokeIcon, size: 28 }],
|
|
568
|
+
pointStyle: { size: 28, color: '#ffffff', strokeColor: '#e01f1f', strokeWidth: 2 },
|
|
569
|
+
showGrid: false,
|
|
570
|
+
fitOnInit: false,
|
|
571
|
+
initialView: { center: [0, 0], scale: 1 },
|
|
572
|
+
width: 240,
|
|
573
|
+
height: 180
|
|
574
|
+
})
|
|
575
|
+
await settle(120)
|
|
576
|
+
const decodeExportSvg = (url) => new TextDecoder().decode(Uint8Array.from(atob(String(url).slice(String(url).indexOf('base64,') + 7)), character => character.charCodeAt(0)))
|
|
577
|
+
const svgStrokeMarkup = decodeExportSvg(await svgStrokeView.exportImage({ type: 'svg', background: 'none', includeLabels: false }))
|
|
578
|
+
check('SVG 导出:currentStrokeColor 跟着节点描边色走(不再是纯白)', /stroke="rgba\(224, 31, 31, 1\)"/.test(svgStrokeMarkup), (svgStrokeMarkup.match(/<path[^>]*>/) ?? ['没有 path'])[0].slice(0, 160))
|
|
579
|
+
svgStrokeView.destroy()
|
|
580
|
+
svgStrokeHost.remove()
|
|
581
|
+
|
|
582
|
+
const triggerHost = document.createElement('div')
|
|
583
|
+
document.body.append(triggerHost)
|
|
584
|
+
const triggerClicks = []
|
|
585
|
+
const triggerDblClicks = []
|
|
586
|
+
const triggerChanges = []
|
|
587
|
+
const triggerView = createGisView(triggerHost, {
|
|
588
|
+
points: [
|
|
589
|
+
{ id: 'trigger-a', x: 0, y: 0, size: 22 },
|
|
590
|
+
{ id: 'trigger-b', x: 120, y: 0, size: 22 }
|
|
591
|
+
],
|
|
592
|
+
features: { select: true },
|
|
593
|
+
showGrid: false,
|
|
594
|
+
fitOnInit: false,
|
|
595
|
+
initialView: { center: [60, 0], scale: 1 },
|
|
596
|
+
width: 400,
|
|
597
|
+
height: 240,
|
|
598
|
+
onClick: payload => triggerClicks.push(payload),
|
|
599
|
+
onDblClick: payload => triggerDblClicks.push(payload),
|
|
600
|
+
onSelectChange: payload => triggerChanges.push(payload)
|
|
601
|
+
})
|
|
602
|
+
await settle(100)
|
|
603
|
+
const triggerBox = triggerView.canvas.getBoundingClientRect()
|
|
604
|
+
const triggerAt = (x, y, extra = {}) => {
|
|
605
|
+
pointerId += 1
|
|
606
|
+
const screen = triggerView.project(x, y)
|
|
607
|
+
const at = { clientX: triggerBox.left + screen[0], clientY: triggerBox.top + screen[1] }
|
|
608
|
+
const common = { bubbles: true, cancelable: true, pointerId, pointerType: 'mouse', button: 0, buttons: 1, ...at, ...extra }
|
|
609
|
+
triggerView.canvas.dispatchEvent(new PointerEvent('pointerdown', common))
|
|
610
|
+
triggerView.canvas.dispatchEvent(new PointerEvent('pointerup', { ...common, buttons: 0 }))
|
|
611
|
+
}
|
|
612
|
+
const triggerClick = async (x, y, extra = {}) => {
|
|
613
|
+
triggerAt(x, y, extra)
|
|
614
|
+
await settle(25)
|
|
615
|
+
}
|
|
616
|
+
const triggerIds = () => triggerView.getSelectionData().ids.join(',')
|
|
617
|
+
await triggerClick(0, 0)
|
|
618
|
+
check('selectTrigger 缺省 click:第一次单击就选中', triggerIds() === 'trigger-a' && triggerClicks.at(-1)?.action?.type === 'select', `${triggerIds()} / ${triggerClicks.at(-1)?.action?.type}`)
|
|
619
|
+
triggerView.selectFeatures(null)
|
|
620
|
+
triggerView.updateOptions({ selectTrigger: 'dblClick' })
|
|
621
|
+
const clicksBeforeDoubleTrigger = triggerClicks.length
|
|
622
|
+
const doublesBeforeTrigger = triggerDblClicks.length
|
|
623
|
+
await triggerClick(0, 0)
|
|
624
|
+
check('selectTrigger: dblClick:第一下只派发 onClick,不改选中集', triggerIds() === '' && triggerClicks.length === clicksBeforeDoubleTrigger + 1 && triggerDblClicks.length === doublesBeforeTrigger, `${triggerIds()} / click ${triggerClicks.length - clicksBeforeDoubleTrigger}`)
|
|
625
|
+
await triggerClick(0, 0)
|
|
626
|
+
check('selectTrigger: dblClick:第二下选中,并同时派发 onClick 与 onDblClick', triggerIds() === 'trigger-a' && triggerClicks.at(-1)?.action?.type === 'select' && triggerClicks.at(-1)?.action?.double === true && triggerDblClicks.length === doublesBeforeTrigger + 1 && triggerDblClicks.at(-1)?.action?.type === 'dblClick', `${triggerIds()} / ${triggerClicks.at(-1)?.action?.type} / dbl ${triggerDblClicks.length - doublesBeforeTrigger}`)
|
|
627
|
+
const doublesBeforeBlank = triggerDblClicks.length
|
|
628
|
+
await triggerClick(200, 80)
|
|
629
|
+
const blankFirstKept = triggerIds() === 'trigger-a'
|
|
630
|
+
await triggerClick(200, 80)
|
|
631
|
+
check('selectTrigger: dblClick:点空白也要等第二下才清空', blankFirstKept && triggerIds() === '' && triggerDblClicks.length === doublesBeforeBlank + 1, `${blankFirstKept} → ${triggerIds() || '空'}`)
|
|
632
|
+
triggerView.updateOptions({ selectTrigger: 'click' })
|
|
633
|
+
await triggerClick(120, 0)
|
|
634
|
+
check('selectTrigger 运行时改回 click 立刻生效', triggerIds() === 'trigger-b', triggerIds())
|
|
635
|
+
|
|
636
|
+
triggerView.updateOptions({ selectTrigger: 'dblClick', multiSelect: true })
|
|
637
|
+
triggerView.selectFeatures(null)
|
|
638
|
+
triggerClicks.length = 0
|
|
639
|
+
triggerDblClicks.length = 0
|
|
640
|
+
await triggerClick(0, 0)
|
|
641
|
+
await triggerClick(0, 0)
|
|
642
|
+
check('selectTrigger: dblClick + multiSelect:第二下取反选中', triggerIds() === 'trigger-a' && triggerClicks.at(-1)?.action?.type === 'toggleSelect' && triggerDblClicks.length === 1, `${triggerIds()} / ${triggerClicks.at(-1)?.action?.type}`)
|
|
643
|
+
await triggerClick(120, 0)
|
|
644
|
+
await triggerClick(120, 0)
|
|
645
|
+
check('selectTrigger: dblClick + multiSelect:再双击另一个节点是累加', triggerIds() === 'trigger-a,trigger-b' && triggerClicks.at(-1)?.action?.type === 'toggleSelect', triggerIds())
|
|
646
|
+
await triggerClick(0, 0)
|
|
647
|
+
await triggerClick(0, 0)
|
|
648
|
+
check('selectTrigger: dblClick + multiSelect:双击已选节点是取消', triggerIds() === 'trigger-b' && triggerClicks.at(-1)?.action?.type === 'toggleSelect', triggerIds())
|
|
649
|
+
triggerView.destroy()
|
|
650
|
+
triggerHost.remove()
|
|
561
651
|
}
|
|
562
652
|
catch (error) {
|
|
563
653
|
results.push('ERROR ' + (error && error.stack ? error.stack : error))
|