Compare commits

..

3 Commits

Author SHA1 Message Date
Thomas Boch
0d613a9b42 Merge pull request #221 from cds-astro/revert-220-fix-circle-opacity-not-working
Revert "Bug fix: opacity is now available for Circle overlays (issue #215)"
2025-01-16 10:03:44 +01:00
Thomas Boch
09f1302646 Revert "Bug fix: opacity is now available for Circle overlays (issue #215)" 2025-01-16 10:03:08 +01:00
Thomas Boch
c39045171e Merge pull request #220 from cds-astro/fix-circle-opacity-not-working
Bug fix: opacity is now available for Circle overlays (issue #215)
2025-01-16 10:00:15 +01:00
267 changed files with 6565 additions and 11225 deletions

View File

@@ -37,7 +37,7 @@ jobs:
uses: actions/configure-pages@v4
- name: Build docs
run: |
npm install
npm install -g jsdoc
npm run doc
- name: Upload artifact
uses: actions/upload-pages-artifact@v3

View File

@@ -24,6 +24,8 @@ jobs:
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup default nightly
rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
- name: "Install wasm-pack"
run: |
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -y

View File

@@ -22,6 +22,8 @@ jobs:
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup default nightly
rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
- name: "Install wasm-pack"
run: |
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -y
@@ -30,7 +32,7 @@ jobs:
npm install
- name: "Build Aladin Lite"
run: |
npm run build:dbg
npm run build
- name: "Run the rust tests"
run: |
npm run test:build

43
.gitignore vendored
View File

@@ -1,43 +0,0 @@
# vscode files
.vscode/
# for mac os users
.DS_Store
out/
# deployment scripts
deploy/
# node dependencies
node_modules/
package-lock.json
# rust tmp files for useful for the compilation phase
src/core/Cargo.lock
src/core/target/
# this rust file is generated when compiling the code, so it is not
# useful to put it on git
src/core/src/shaders.rs
## python related
# python environment
aladin-lite-venv
# python cached files
__pycache__/
## API doc related
# folder containing the generated HTML API documentation files
docs/
# style jsdoc files generated with npm run doc
jsdoc-custom-styledocs
# responsive jsdoc files generated with npm run doc
jsdoc-make-responsivedocs
## playwright testing framework related
test-results/
playwright-report/
## packaged tar obtained from the cmd: npm run predeploy or npm run deploy
aladin-lite*.tgz
# folder where the generated bundle lies
dist/

View File

@@ -1,33 +0,0 @@
{
"license": "GPL-3.0",
"access_right": "open",
"description": "An astronomical HiPS visualizer in the browser ",
"keywords": ["astronomy", "visualizer", "images"],
"language": "eng",
"title": "Aladin Lite",
"grants": [
{
"id": "824064"
}
],
"creators": [
{
"type": "ProjectLeader",
"orcid": "0000-0002-7123-773X",
"name": "Baumann, Matthieu",
"affiliation": "Université de Strasbourg, CNRS, Observatoire astronomique de Strasbourg, UMR 7550, F-67000 Strasbourg, France"
},
{
"type": "ProjectLeader",
"orcid": "0000-0001-5818-2781",
"name": "Boch, Thomas",
"affiliation": "Université de Strasbourg, CNRS, Observatoire astronomique de Strasbourg, UMR 7550, F-67000 Strasbourg, France"
},
{
"type": "ProjectMember",
"orcid": "0000-0001-5713-0998",
"name": "Marchand, Manon",
"affiliation": "Université de Strasbourg, CNRS, Observatoire astronomique de Strasbourg, UMR 7550, F-67000 Strasbourg, France"
}
]
}

View File

@@ -1,9 +1,5 @@
# Changelogs
## unreleased
* [fix] request a redraw after adding an array of footprints [PR #218]
## 3.5.1-beta
* [feat] Add support for name removing in `removeOverlay` method

View File

@@ -13,7 +13,6 @@ A new [API technical documentation](https://cds-astro.github.io/aladin-lite/) is
[![Run tests](https://github.com/cds-astro/aladin-lite/actions/workflows/test.yml/badge.svg)](https://github.com/cds-astro/aladin-lite/actions/workflows/test.yml)
[![API Documentation](https://img.shields.io/badge/API-documentation-blue.svg)](https://cds-astro.github.io/aladin-lite)
[![Releases page](https://img.shields.io/badge/Releases-forge-yellow.svg)](https://aladin.cds.unistra.fr/AladinLite/doc/release/)
Aladin Lite is available [at this link](https://aladin.u-strasbg.fr/AladinLite).
@@ -90,7 +89,6 @@ Aladin Lite can be imported with:
```html
<script type="module">
import A from 'aladin-lite';
// your code...
</script>
```
@@ -142,6 +140,12 @@ to compile the core project into WebAssembly.
Follow the steps from the Rust official website [here](https://www.rust-lang.org/learn/get-started)
You will also need [wasm-pack](https://rustwasm.github.io/wasm-pack/), a tool helping compiling rust into a proper .wasm file.
Once it's installed you will need to switch to the nightly rust version:
```sh
rustup default nightly
```
Then you can build the project:
```sh
@@ -154,14 +158,15 @@ npm run build
> ```sh
> cargo install wasm-pack --version ~0.12
> ```
> - Make sure you are using the rust **nightly** toolchain
> ```sh
> rustup default nightly
> ```
> - Remove your `src/core/Cargo.lock` file and `src/core/target` directory -- this ensures that you'd escape any bad compilation state:
> ```sh
> git clean -di
> ```
> - Then recompile
> ```sh
> npm run build
> ```
> - then recompile with `npm run build`.
It will generate the aladin lite compiled code into a `dist/` directory located at the root of the repository. This directory contains two javascript files. `aladin.umd.cjs` follows the UMD module export convention and it is the one you need to use for your project.

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 4.5L6 7L6 5.25H18V7L21 4.5L18 2V3.75H6L6 2L3 4.5Z" />
<path d="M6.63935 11.9367C7.14967 10.7061 8.89138 10.7018 9.4077 11.9299L12.735 19.8442C13.9443 22.7205 18.0283 22.6965 19.2036 19.8061L21.1579 15H18.9989L17.351 19.0527C16.8472 20.2915 15.0969 20.3018 14.5787 19.0691L11.2514 11.1548C10.0466 8.28919 5.98264 8.29911 4.79189 11.1706L3.20392 15H5.36906L6.63935 11.9367Z" />
</svg>

Before

Width:  |  Height:  |  Size: 623 B

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M4,3H9A1,1,0,0,1,9,5H5V9A1,1,0,0,1,3,9V4A1,1,0,0,1,4,3ZM9,19H5V15a1,1,0,0,0-2,0v5a1,1,0,0,0,1,1H9a1,1,0,0,0,0-2Zm11-5a1,1,0,0,0-1,1v4H15a1,1,0,0,0,0,2h5a1,1,0,0,0,1-1V15A1,1,0,0,0,20,14ZM20,3H15a1,1,0,0,0,0,2h4V9a1,1,0,0,0,2,0V4A1,1,0,0,0,20,3ZM7,8v8a1,1,0,0,0,1,1h8a1,1,0,0,0,1-1V8a1,1,0,0,0-1-1H8A1,1,0,0,0,7,8Z"/></svg>

Before

Width:  |  Height:  |  Size: 555 B

View File

@@ -8,8 +8,8 @@
"dateModified": "2023-01-31",
"issueTracker": "https://github.com/cds-astro/aladin-lite/issues",
"name": "Aladin Lite",
"version": "3.6.1",
"softwareVersion": "3.6.1",
"version": "3.5.1-beta",
"softwareVersion": "3.5.1-beta",
"description": "An astronomical HiPS visualizer in the browser.",
"identifier": "10.5281/zenodo.7638833",
"applicationCategory": "Astronomy, Visualization",

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,45 +0,0 @@
hips_doi = 10.26093/cds/aladin/ht9n-7r
creator_did = ivo://CDS/P/DSS2/color
obs_collection = DSS colored
obs_title = DSS colored
obs_description = Color composition generated by CDS. This HiPS survey is based on 2 others HiPS surveys, respectively DSS2-red and DSS2-blue HiPS, both of them directly generated from original scanned plates downloaded from STScI site. The red component has been built from POSS-II F, AAO-SES,SR and SERC-ER plates. The blue component has been build from POSS-II J and SERC-J,EJ. The green component is based on the mean of other components. Three missing plates from red survey (253, 260, 359) has been replaced by pixels from the DSSColor STScI jpeg survey. The 11 missing blue plates (mainly in galactic plane) have not been replaced (only red component).
obs_copyright = Digitized Sky Survey - STScI/NASA, Colored & Healpixed by CDS
obs_copyright_url = http://archive.stsci.edu/dss/copyright.html
client_category = Image/Optical/DSS
client_sort_key = 03-00
hips_builder = Aladin/HipsGen v10.123
hips_creation_date = 2010-05-01T19:05Z
hips_release_date = 2019-05-07T10:55Z
hips_creator = Oberto A. (CDS) , Fernique P. (CDS)
hips_version = 1.4
hips_order = 7
hips_frame = equatorial
hips_tile_width = 512
hips_tile_format = jpeg
dataproduct_type = image
client_application = AladinLite
hips_status = public partial unclonable
hips_rgb_red = DSS2Merged [1488.0 8488.8125 14666.0 Linear]
hips_rgb_blue = DSS2-blue-XJ-S [4286.0 12122.5 19959.0 Linear]
hips_hierarchy = median
hips_pixel_scale = 2.236E-4
hips_initial_ra = 085.30251
hips_initial_dec = -02.25468
hips_initial_fov = 2
moc_sky_fraction = 1.0
hips_copyright = CNRS/Unistra
obs_ack = The Digitized Sky Surveys were produced at the Space Telescope Science Institute under U.S. Government grant NAG W-2166. The images of these surveys are based on photographic data obtained using the Oschin Schmidt Telescope on Palomar Mountain and the UK Schmidt Telescope. The plates were processed into the present compressed digital form with the permission of these institutions. The National Geographic Society - Palomar Observatory Sky Atlas (POSS-I) was made by the California Institute of Technology with grants from the National Geographic Society. The Second Palomar Observatory Sky Survey (POSS-II) was made by the California Institute of Technology with funds from the National Science Foundation, the National Geographic Society, the Sloan Foundation, the Samuel Oschin Foundation, and the Eastman Kodak Corporation. The Oschin Schmidt Telescope is operated by the California Institute of Technology and Palomar Observatory. The UK Schmidt Telescope was operated by the Royal Observatory Edinburgh, with funding from the UK Science and Engineering Research Council (later the UK Particle Physics and Astronomy Research Council), until 1988 June, and thereafter by the Anglo-Australian Observatory. The blue plates of the southern Sky Atlas and its Equatorial Extension (together known as the SERC-J), as well as the Equatorial Red (ER), and the Second Epoch [red] Survey (SES) were all taken with the UK Schmidt. Supplemental funding for sky-survey work at the ST ScI is provided by the European Southern Observatory.
prov_progenitor = STScI
bib_reference = 1996ASPC..101...88L
bib_reference_url = http://cdsads.u-strasbg.fr/abs/1996ASPC..101...88L
t_min = 42413
t_max = 51179
obs_regime = Optical
em_min = 4e-7
em_max = 6e-7
hips_order_min = 0
dataproduct_subtype = color
hipsgen_date = 2019-05-07T10:55Z
hipsgen_params = out=/asd-volumes/sc1-asd-volume8/DSS/DSSColor UPDATE
hipsgen_date_1 = 2024-09-10T16:50Z
hipsgen_params_1 = in=https://alasky.cds.unistra.fr/DSS/DSSColor/ out=./CDS_P_DSS2_color region=3/357 order=5 MIRROR

View File

@@ -8,7 +8,7 @@
import A from '../src/js/A.js';
let aladin;
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', { fov:0.15, target: 'Arp 240', showContextMenu: true, showReticle: false, fullScreen: true });
aladin = A.aladin('#aladin-lite-div', { fov:0.15, target: 'Arp 240', showReticle: false, fullScreen: true });
aladin.setBaseImageLayer(aladin.newImageSurvey('P/SDSS9/g', {colormap: "eosb", stretch: "linear"}));
var simbad = A.catalog({name: 'Simbad', sourceSize: 16, color: '#4050F0'});
@@ -16,9 +16,9 @@
simbad.addSources([A.marker(204.97010833333336, 0.8400166666666667, {popupTitle: 'NGC 5257', popupDesc: '<em>Object type:</em> HII galaxy<br/><em>Morphological type:</em> Sbc<br/><br/>More info <a href="https://simbad.u-strasbg.fr/simbad/sim-id?Ident=NGC+5257">in Simbad</a>'}), A.marker(204.9903125, 0.8309694444444445, {popupTitle: 'NGC 5258', popupDesc: '<em>Object type:</em> Galaxy in Pair of Galaxies <br/><em>Morphological type:</em> Sb<br/><br/>More info <a href="https://simbad.u-strasbg.fr/simbad/sim-id?Ident=NGC+5258">in Simbad</a>'})]);
var overlay = A.graphicOverlay({color: '#aa2222', lineWidth: 4});
overlay.addFootprints(A.polygon([[204.970214, 0.81206], [204.97110047, 0.80993368], [204.978723, 0.79165], [204.999152, 0.800162], [204.99482125, 0.81055582], [205.002941, 0.813851], [204.99986816, 0.82141125], [205.010312, 0.825578], [205.002112, 0.846123], [204.981546, 0.837916], [204.98157771, 0.83783654], [204.962977, 0.830202], [204.9703941, 0.81213504]]));
aladin.addOverlay(overlay);
overlay.addFootprints(A.polygon([[204.970214, 0.81206], [204.97110047, 0.80993368], [204.978723, 0.79165], [204.999152, 0.800162], [204.99482125, 0.81055582], [205.002941, 0.813851], [204.99986816, 0.82141125], [205.010312, 0.825578], [205.002112, 0.846123], [204.981546, 0.837916], [204.98157771, 0.83783654], [204.962977, 0.830202], [204.9703941, 0.81213504]]));
aladin.displayJPG('http://images.ipac.caltech.edu/esahubble/heic0810at/esahubble_heic0810at_1600.jpg');
});

View File

@@ -10,9 +10,8 @@
import A from '../src/js/A.js';
let aladin;
A.init.then(() => {
let startFov = 1000;
aladin = A.aladin('#aladin-lite-div', {showSettingsControl: true, survey: "P/PanSTARRS/DR1/color-z-zg-g", showReticle: false, projection: "AIT", cooFrame: 'icrs', target: "stephan's quintet", fov: startFov, showGotoControl: false, showFrame: false, fullScreen: true, showLayersControl: true, showCooGridControl: false});
aladin = A.aladin('#aladin-lite-div', {showSettingsControl: true, survey: "P/PanSTARRS/DR1/color-z-zg-g", showReticle: false, projection: "AIT", cooFrame: 'icrs', target: "stephan's quintet", fov: 1000, showGotoControl: false, showFrame: false, fullScreen: true, showLayersControl: true, showCooGridControl: false});
aladin.showHealpixGrid(true);
const chft = aladin.createImageSurvey('CFHT', "CFHT deep view of NGC7331 and Stephan's quintet u+g+r", "https://cds.unistra.fr/~derriere/PR_HiPS/2022_Duc/", null, null, {imgFormat: 'png'});
const nircamJWST = aladin.createImageSurvey('Nircam', "Stephans Quintet NIRCam+MIRI", "http://alasky.cds.unistra.fr/JWST/CDS_P_JWST_Stephans-Quintet_NIRCam+MIRI/", null, null, {imgFormat: 'png', colormap: "viridis"});
@@ -22,7 +21,7 @@
aladin.getOverlayImageLayer("CFHT").toggle();
aladin.getOverlayImageLayer("Nircam").toggle();
let fov = startFov;
let fov = 360;
let rotation = 0;
setInterval(function zoom() {

View File

@@ -5,8 +5,7 @@
<body>
<div id="aladin-lite-div" style="width: 1024px; height: 768px"></div>
<script type="module">
import A from '../src/js/A.js';
import A from '../src/js/A.js';
A.init.then(() => {
let aladin = A.aladin('#aladin-lite-div', {projection: "TAN", survey: "P/HSC/DR2/deep/g", target: '02 21 36.529 -05 31 20.16', fov: 0.1});
@@ -17,7 +16,6 @@ A.init.then(() => {
const HSCRedSurvey = aladin.newImageSurvey('P/HSC/DR2/deep/r', {imgFormat: 'fits', colormap: "red", minCut: 0.34228, maxCut: 2.75785, additive: true, stretch: "asinh"});
const HSCBlueSurvey = aladin.newImageSurvey('P/HSC/DR2/deep/z', {imgFormat: 'fits', colormap: "blue", minCut: -0.01218, maxCut: 2.27397, additive: true, stretch: "asinh"});
HSCRedSurvey.setColormap('red', {stretch: 'linear'});
aladin.setOverlayImageLayer('P/HSC/DR2/deep/r', 'hsc red layer');
aladin.setOverlayImageLayer('P/HSC/DR2/deep/z', 'hsc blue layer');

View File

@@ -10,7 +10,7 @@
import A from '../src/js/A.js';
let aladin;
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', {samp: true, survey: "data/hips/PanSTARRS_DR1_color-z-zg-g", fov:2.0, target: "22 35 58.39 +33 57 57.8", showSettingsControl: true, log: false});
aladin = A.aladin('#aladin-lite-div', {survey: "data/hips/PanSTARRS_DR1_color-z-zg-g", fov:2.0, target: "22 35 58.39 +33 57 57.8", showSettingsControl: true, log: false});
aladin.setProjection('AIT');
let cfht = aladin.createImageSurvey("CFHT", "CFHT MegaCam u+g+r", "./data/hips/CFHT", "equatorial", 10, {imgFormat: 'png'});
let jwst1 = aladin.createImageSurvey("CDS/P/JWST/Stephans-Quintet/NIRCam+MIRI", "JWST NIRCam+MIRI", "data/hips/JWST_NIRCam_MIRI", null, null, {imgFormat: 'png'});

View File

@@ -1,81 +0,0 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, height=device-height, maximum-scale=1.0, initial-scale=1.0, user-scalable=no">
</head>
<body>
<div id="aladin-lite-div" style="width: 1024px; height: 768px">
<div class="box-content" style="width:200px">
<div style="display:inline-flex">
<label for="cat-color">Color</label>
<input type="color" id="cat-color" value="#ff0000">
</div>
</div>
</div>
<script type="module">
import A from '../src/js/A.js';
let aladin;
A.init.then(() => {
var aladin = A.aladin(
'#aladin-lite-div',
{
fov: 1.5, // initial field of view in degrees
target: 'NGC 2175', // initial target
}
);
// Add a catalog
let cat = A.catalogFromSimbad('NGC 2175', 0.1, {onClick: 'showTable'});
aladin.addCatalog(cat);
// Logic for changing the color of catalog sources
let colorPicker = document.querySelector('#cat-color');
colorPicker.value = cat.color;
colorPicker.addEventListener('input', function (e) {
// Change the color of the catalog
cat.updateShape({color: this.value});
})
// Define the box
let catalogSettingsBox = A.box({
header: {
title: "Settings",
},
content: document.querySelectorAll('.box-content')[0],
});
catalogSettingsBox._hide();
// Define the button that toggles the box
let catalogSettingsBtn = A.button({
content: 'Catalog',
classList: ['catalogSettingsTogglerBtn'],
action(o) {
if (catalogSettingsBox.isHidden) {
catalogSettingsBox._show({
position: {
nextTo: catalogSettingsBtn,
direction: 'right',
}
})
} else {
catalogSettingsBox._hide()
}
}
});
aladin.addUI([catalogSettingsBtn, catalogSettingsBox])
});
</script>
<style>
.catalogSettingsTogglerBtn {
position: absolute;
top: 200px;
left: 0;
}
</style>
</body>
</html>

View File

@@ -12,11 +12,9 @@
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', {projection: 'AIT', cooFrame: 'galactic', fov: 200, target: 'galactic center'});
let dss = aladin.createImageSurvey("DSS blue band", "Color DSS blue HiPS", "http://alasky.cds.unistra.fr/DSS/DSS2-blue-XJ-S/", "equatorial", 9, {imgFormat: 'fits'})
aladin.setBaseImageLayer(dss);
dss.setCuts(2, 10000);
aladin.getBaseImageLayer().setCuts(2, 10000);
});
</script>

View File

@@ -11,7 +11,7 @@
import A from '../src/js/A.js';
let aladin;
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', {cooFrame: "icrs", log: false, backgroundColor: 'red'});
aladin = A.aladin('#aladin-lite-div', {cooFrame: "icrs", log: false});
aladin.displayFITS(
//'https://fits.gsfc.nasa.gov/samples/FOCx38i0101t_c0f.fits', // url of the fits file

View File

@@ -1,19 +0,0 @@
<!doctype html>
<html>
<head>
</head>
<body>
<div id="aladin-lite-div" style="width: 1024px; height: 768px"></div>
<script type="module">
import A from '../src/js/A.js';
var aladin;
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', {showContextMenu: true, survey: 'https://alasky.cds.unistra.fr/Pan-STARRS/DR1/color-i-r-g/', fov: 0.00833333333, target: '270.334079 66.730469'});
aladin.showHealpixGrid(true)
});
</script>
</body>
</html>

View File

@@ -20,7 +20,6 @@
showSettingsControl: true,
showStackLayerControl: true,
samp: true,
showCooGrid: true,
});
aladin.addCatalog(A.catalogFromSimbad('M 82', 0.1, {onClick: 'showTable'}));

View File

@@ -13,7 +13,7 @@
// Start up Aladin Lite
aladin = A.aladin('#aladin-lite-div', {survey: "CDS/P/DSS2/color", target: 'M 1', fov: 0.2, showContextMenu: true, fullScreen: true});
var overlay = A.graphicOverlay({color: '#ee2345', lineWidth: 3, lineDash: [2, 2]});
/*aladin.addOverlay(overlay);
aladin.addOverlay(overlay);
overlay.addFootprints([
A.polygon([[83.64287, 22.01713], [83.59872, 22.01692], [83.59852, 21.97629], [83.64295, 21.97629]], {hoverColor: 'green'}),
A.polygon([[83.62807, 22.06330], [83.58397, 22.02280], [83.62792, 22.02258]]),
@@ -21,7 +21,7 @@
]);
overlay.add(A.circle(83.66067, 22.03081, 0.04, {color: 'cyan'})); // radius in degrees
overlay.add(A.vector(83.66067, 22.03081, 0.04, {color: 'cyan'})); // radius in degrees
*/
aladin.on("footprintClicked", (footprint, xyMouseCoords) => {
console.log("footprint clicked catched: ", footprint, "mouse coords xy: ", xyMouseCoords.x, xyMouseCoords.y);
})
@@ -35,7 +35,7 @@
console.log("Object hovered stopped: ", object, "mouse coords xy: ", xyMouseCoords.x, xyMouseCoords.y);
})
const cat = A.catalogFromVizieR('B/assocdata/obscore', 'M 1', 10, {onClick: 'showTable', selectionColor: "orange", hoverColor: 'red', limit: 10000});
const cat = A.catalogFromVizieR('B/assocdata/obscore', 'M 1', 10, {onClick: 'showTable', hoverColor: 'purple', limit: 10000});
aladin.addCatalog(cat);
});
</script>

View File

@@ -14,10 +14,10 @@
A.init.then(() => {
aladin = A.aladin('#aladin-lite-div', {survey: "data/hips/CDS_P_DSS2_color", showReticle: true, showSurveyStackControl: true, showOverlayStackControl: false, projection: "TAN", target: '15 16 57.636 -60 55 7.49', showProjectionControl: true, realFullscreen: true, showZoomControl: true, showSimbadPointerControl: true, showShareControl: true, showContextMenu: true, showCooGridControl: true, fullScreen: true, showCooGrid: true, fov: 180, log: false});
var moc_0_99 = A.MOCFromURL("./data/gw/gw_0.9.fits",{ name: "GW 90%", color: "#ff0000", opacity: 0.7, lineWidth: 10, fill: false, perimeter: true});
var moc_0_95 = A.MOCFromURL("./data/gw/gw_0.6.fits",{ name: "GW 60%", color: "#00ff00", opacity: 0.3, lineWidth: 3, fill: false, perimeter: true});
var moc_0_5 = A.MOCFromURL("./data/gw/gw_0.3.fits",{ name: "GW 30%", color: "#00ffff", opacity: 0.2, lineWidth: 3, fill: true, perimeter: true});
var moc_0_2 = A.MOCFromURL("./data/gw/gw_0.1.fits",{ name: "GW 10%", color: "#ff00ff", opacity: 0.1, lineWidth: 3});
var moc_0_99 = A.MOCFromURL("./data/gw/gw_0.9.fits",{ name: "GW 90%", color: "#ff0000", opacity: 0.0, lineWidth: 10, fill: false, perimeter: true});
var moc_0_95 = A.MOCFromURL("./data/gw/gw_0.6.fits",{ name: "GW 60%", color: "#00ff00", opacity: 0.5, lineWidth: 3, fill: true, perimeter: true});
var moc_0_5 = A.MOCFromURL("./data/gw/gw_0.3.fits",{ name: "GW 30%", color: "#00ffff", opacity: 0.5, lineWidth: 3, fill: true, perimeter: true});
var moc_0_2 = A.MOCFromURL("./data/gw/gw_0.1.fits",{ name: "GW 10%", color: "#ff00ff", opacity: 0.5, lineWidth: 3, fill: true, perimeter: true});
aladin.addMOC(moc_0_99);
aladin.addMOC(moc_0_95);

View File

@@ -1,52 +0,0 @@
<!doctype html>
<html>
<head>
</head>
<body>
<div id="aladin-lite-div" style="width: 768px; height: 512px"></div>
<script>let aladin; let hips;</script>
<script type="module">
import A from '../src/js/A.js';
A.init.then(() => {
aladin = A.aladin(
'#aladin-lite-div',
{
showSimbadPointerControl: true,
projection: 'AIT', // set a projection
fov: 360, // initial field of view in degrees
target: '169.58868 +45.74914', // initial target
cooFrame: 'icrs', // set galactic frame
reticleColor: '#ff89ff', // change reticle color
reticleSize: 64, // change reticle size
showContextMenu: true,
showFrame: true,
showZoomControl:true,
showSettingsControl:true,
showCooGrid: true,
fullScreen: true,
samp: true,
}
);
hips = aladin.newImageSurvey("https://alasky.cds.unistra.fr/GALFAHI/GALFAHI-Narrow-DR2/");
aladin.setImageLayer(hips)
/*let id;
aladin.on("zoomChanged", () => {
if (id)
clearTimeout(id);
id = setTimeout(() => {
console.log("wheel stopped, new cone search here")
}, 500);
})*/
});
</script>
<style>
.aladin-cat-browser-box {
width: 600px;
}
</style>
</body>
</html>

View File

@@ -16,13 +16,12 @@
showSimbadPointerControl: true,
survey: 'P/allWISE/color', // set initial image survey
projection: 'AIT', // set a projection
fov: 360, // initial field of view in degrees
fov: 1.5, // initial field of view in degrees
target: 'orion', // initial target
cooFrame: 'icrs', // set galactic frame
reticleColor: '#ff89ff', // change reticle color
reticleSize: 64, // change reticle size
showContextMenu: true,
showShareControl: true,
showFrame: true,
showZoomControl:true,
showSettingsControl:true,
@@ -42,5 +41,10 @@
})*/
});
</script>
<style>
.aladin-cat-browser-box {
width: 600px;
}
</style>
</body>
</html>

View File

@@ -1,135 +0,0 @@
<!DOCTYPE html>
<html>
<head> </head>
<body>
<div id="aladin-lite-div" style="width: 500px; height: 400px"></div>
<script type="module">
import A from "../src/js/A.js";
let aladin;
A.init.then(() => {
aladin = A.aladin("#aladin-lite-div", {
fullScreen: true,
target: "abell 194",
fov: 15,
projection: "AIT",
showContextMenu: true,
showShareControl: true,
samp: true,
showSettingsControl: true,
showZoomControl: true,
});
/*let pmraMean = null, pmdecMean = null;
const pmCat = A.catalogFromURL('./data/proper_motion.xml', {
onClick: 'showTable',
name: 'mean pm over HPX cells around LMC from GaiaDR2',
hoverColor: 'yellow',
selectionColor: 'white',
color: 'yellow',
// Footprint associated to sources
shape: (s) => {
// discard drawing a vector for big pm
let totalPmSquared = s.data.pmra*s.data.pmra + s.data.pmdec*s.data.pmdec;
if (totalPmSquared > 6) {
return;
}
let color = rainbowColorMap((totalPmSquared - 2.5) / 2)
// Compute the mean of pm over the catalog sources
if (!pmraMean || !pmdecMean) {
pmraMean = 0, pmdecMean = 0;
for (var s of pmCat.getSources()) {
pmraMean += +s.data.pmra;
pmdecMean += +s.data.pmdec;
}
const numSources = pmCat.getSources().length;
pmraMean /= numSources
pmdecMean /= numSources
}
let dra = +s.data.pmra - pmraMean;
let ddec = +s.data.pmdec - pmdecMean;
return A.vector(
s.ra,
s.dec,
s.ra + dra,
s.dec + ddec,
{lineWidth: 3, color}
)
}
});
aladin.addCatalog(pmCat);*/
/*aladin.addCatalog(
A.catalogFromURL("./data/votable/obscore_rucio-sdc03.votable", {
name: 'SKA discovery ObsCore around: SDC03',
onClick: 'showTable',
hoverColor: "yellow",
})
);
aladin.addCatalog(
A.catalogFromURL("./data/votable/obscore_rucio-abell194.votable", {
name: 'SKA discovery ObsCore around: Abell 194',
onClick: 'showTable',
hoverColor: "yellow",
})
);*/
aladin.addCatalog(
A.catalogFromSKAORucio("abell 194", 15, {
onClick: 'showTable',
hoverColor: "yellow",
})
);
aladin.addCatalog(
A.catalogFromSKAORucio("m51", 15, {
onClick: 'showTable',
hoverColor: "yellow",
})
);
});
function rainbowColorMap(value) {
// Ensure value is within range [0, 1]
value = Math.max(0, Math.min(1, value));
// Convert value to hue
var hue = (1 - value) * 240; // 240 is the maximum hue value for blue
// Convert HSV to RGB
var chroma = 1;
var x = chroma * (1 - Math.abs((hue / 60) % 2 - 1));
var r1, g1, b1;
if (hue >= 0 && hue < 60) {
[r1, g1, b1] = [chroma, x, 0];
} else if (hue >= 60 && hue < 120) {
[r1, g1, b1] = [x, chroma, 0];
} else if (hue >= 120 && hue < 180) {
[r1, g1, b1] = [0, chroma, x];
} else if (hue >= 180 && hue < 240) {
[r1, g1, b1] = [0, x, chroma];
}
var m = 1 - chroma;
var r = r1 + m;
var g = g1 + m;
var b = b1 + m;
// Convert RGB to HEX
r = Math.round(r * 255);
g = Math.round(g * 255);
b = Math.round(b * 255);
var colorHex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
return colorHex;
}
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -55,7 +55,7 @@
aladin.addCatalog(A.catalogFromURL('https://aladin.cds.unistra.fr/AladinLite/doc/API/examples/data/mars-features.xml', {name: "Mars features", raField: 'Longitude', decField: 'Latitude', shape: drawFunction, onClick: 'showTable'}));
aladin.getBaseImageLayer().setColormap('ylorbr')
aladin.getBaseImageLayer().setColormap('yiorbr')
aladin.gotoRaDec(226.1433542, 18.6308694);
});

View File

@@ -24,14 +24,8 @@
//var json = {"3":[517],
//"4":[2065, 2067]};
var moc = A.MOCFromJSON(json, {opacity: 0.5, color: 'magenta', lineWidth: 1, fill: true});
var moc = A.MOCFromJSON(json, {opacity: 0.25, color: 'magenta', lineWidth: 1, adaptativeDisplay: false});
aladin.addMOC(moc);
// Change the moc options after its creation
setTimeout(() => {
moc.opacity = 0.2
moc.fillColor = "orange"
}, 3000)
});
</script>
</body>

View File

@@ -20,7 +20,7 @@
console.log(moc.serialize("json"))
});
var moc10 = A.MOCFromURL('https://alasky.unistra.fr/MocServer/query?ivorn=ivo%3A%2F%2FCDS%2FV%2F139%2Fsdss9&get=moc&order=11&fmt=fits', {color: '#ffffff', perimeter: true, fill:true, fillColor: '#aabbcc', opacity: 0.3, lineWidth: 3});
var moc10 = A.MOCFromURL('https://alasky.unistra.fr/MocServer/query?ivorn=ivo%3A%2F%2FCDS%2FV%2F139%2Fsdss9&get=moc&order=11&fmt=fits', {color: '#ffffff', perimeter: true, fillColor: '#aabbcc', opacity: 0.3, lineWidth: 3});
var moc9 = A.MOCFromURL('https://alasky.unistra.fr/MocServer/query?ivorn=ivo%3A%2F%2FCDS%2FV%2F139%2Fsdss9&get=moc&order=4&fmt=fits', {color: '#00ff00', opacity: 0.5, lineWidth: 3, perimeter: true});
aladin.addMOC(moc11);

View File

@@ -77,7 +77,7 @@
});
aladin.addCatalog(
A.catalogFromSKAORucio("abell 196", 90, {
A.catalogFromSKAORucio("ngc 1436", 15, {
onClick: 'showTable',
hoverColor: "yellow",
})

View File

@@ -25,9 +25,9 @@
aladin.setImageLayer(survey2);
setTimeout(() => {
/*setTimeout(() => {
aladin.removeHiPSFromFavorites(survey3)
}, 5000);
}, 10000);*/
aladin.addColormap('mycmap', ["lightblue", "red", "violet", "lightgreen"])

View File

@@ -15,6 +15,10 @@
// 'rdbu', 'rdylbu', 'redtemperature', 'sinebow', 'spectral', 'summer', 'viridis', 'ylgnbu' and 'ylorbr'
hips = aladin.getBaseImageLayer()
hips.setColormap("cubehelix");
aladin.setImageSurvey('astron.nl/P/lotss_dr2_high')
//aladin.getBaseImageLayer().setColor([1.0, 0.0, 1.0, 1.0], { tf: 'Linear'} );
});
</script>

View File

@@ -1,7 +0,0 @@
var meta = document.createElement("meta");
meta.name = "viewport"
meta.content = "width=device-width, height=device-height, initial-scale=1.0, user-scalable=no"
document.querySelector("head").appendChild(
meta
)

View File

@@ -11,10 +11,8 @@
"dictionaries": ["jsdoc","closure"]
},
"docdash": {
"typedefs": true,
"scripts": [
"jsdoc-custom-style.css",
"jsdoc-make-responsive.js"
"jsdoc-custom-style.css"
],
"sectionOrder": [
"Namespaces",
@@ -23,8 +21,8 @@
"Externals",
"Events",
"Mixins",
"Interfaces",
"Global"
"Tutorials",
"Interfaces"
],
"openGraph": {
"title": "Aladin Lite API documentation",
@@ -40,35 +38,17 @@
},
"search": true,
"menu": {
"Aladin Lite portal": {
"href":"https://aladin.cds.unistra.fr/AladinLite",
"target":"_blank",
"class":"menu-item",
"id":"website_link"
},
"API examples": {
"href":"https://aladin.cds.unistra.fr/AladinLite/doc/API/examples",
"target":"_blank",
"class":"menu-item",
"id":"website_link"
},
"Documentation": {
"Project Website": {
"href":"https://aladin.cds.unistra.fr/AladinLite/doc/",
"target":"_blank",
"class":"menu-item",
"id":"website_link"
},
"Releases": {
"href":"https://aladin.cds.unistra.fr/AladinLite/doc/release",
"Forum": {
"href":"https://github.com/cds-astro/aladin-lite/issues",
"target":"_blank",
"class":"menu-item",
"id":"website_link"
},
"GitHub": {
"href":"https://github.com/cds-astro/aladin-lite",
"target":"_blank",
"class":"menu-item",
"id":"website_link"
"id":"forum_link"
}
}
},
@@ -78,8 +58,7 @@
"default": {
"staticFiles": {
"include": [
"./jsdoc-custom-style.css",
"./jsdoc-make-responsive.js"
"./jsdoc-custom-style.css"
]
}
}

View File

@@ -2,7 +2,7 @@
"homepage": "https://aladin.u-strasbg.fr/",
"name": "aladin-lite",
"type": "module",
"version": "3.6.2",
"version": "3.5.1-beta",
"description": "An astronomical HiPS visualizer in the browser",
"author": "Thomas Boch and Matthieu Baumann",
"license": "GPL-3",
@@ -30,8 +30,8 @@
"HiPS"
],
"scripts": {
"wasm": "wasm-pack build ./src/core --target web --release --out-name core -- --features webgl2",
"wasm:dbg": "wasm-pack build --dev ./src/core --target web --out-name core -- --features=webgl2,dbg",
"wasm": "wasm-pack build ./src/core --target web --release --out-name core -- --features webgl2 -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort ",
"wasm:dbg": "wasm-pack build --dev ./src/core --target web --out-name core -- --features=webgl2,dbg -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort ",
"predeploy": "npm run build && rm -rf aladin-lite*.tgz && npm pack",
"deploy": "python3 deploy/deploy.py",
"build": "npm run wasm && vite build",
@@ -44,7 +44,7 @@
"test:build": "cd src/core && cargo test --release --features webgl2",
"test:playwright": "npx playwright test",
"test:update-snapshots": "npx playwright test --update-snapshots",
"doc": "jsdoc -c jsdoc.json src/js src/js/shapes src/js/libs/astro && cp aladin-logo.png docs/ && cp jsdoc-custom-style.css docs/ && cp jsdoc-make-responsive.js docs/",
"doc": "jsdoc -c jsdoc.json src/js src/js/shapes src/js/libs/astro && cp aladin-logo.png docs/ && cp jsdoc-custom-style.css docs/",
"doc:dev": "npm run doc && open docs/index.html"
},
"devDependencies": {

View File

@@ -3,7 +3,7 @@ name = "aladin-lite"
description = "Aladin Lite v3 introduces a new graphical engine written in Rust with the use of WebGL"
license = "BSD-3-Clause"
repository = "https://github.com/cds-astro/aladin-lite"
version = "3.6.2"
version = "3.5.1-beta"
authors = [ "baumannmatthieu0@gmail.com", "matthieu.baumann@astro.unistra.fr",]
edition = "2018"
@@ -22,12 +22,11 @@ url-lite = "0.1.0"
serde_json = "1.0.104"
serde-wasm-bindgen = "0.5"
enum_dispatch = "0.3.8"
wasm-bindgen = "0.2.100"
wasm-bindgen = "0.2.79"
wasm-streams = "0.3.0"
async-channel = "1.8.0"
mapproj = "0.3.0"
fitsrs = "0.2.11"
wcs = "0.3.1"
colorgrad = "0.6.2"
[features]
@@ -41,17 +40,23 @@ rand = "0.8"
[build-dependencies]
walkdir = "2.3.2"
[dependencies.wcs]
git = "https://github.com/cds-astro/wcs-rs"
branch = "master"
[dependencies.console_error_panic_hook]
version = "0.1.7"
optional = true
[dependencies.healpix]
package = "cdshealpix"
version = "0.7.3"
git = "https://github.com/cds-astro/cds-healpix-rust"
branch = "master"
[dependencies.moclib]
package = "moc"
version = "0.17.0"
git = "https://github.com/bmatthieu3/cds-moc-rust"
branch = "overlap"
[dependencies.serde]
version = "^1.0.183"

View File

@@ -9,7 +9,7 @@ js-sys = "0.3.47"
cgmath = "*"
serde = { version = "^1.0.59", features = ["derive"] }
serde-wasm-bindgen = "0.4"
wasm-bindgen = "0.2.92"
wasm-bindgen = "0.2.79"
colorgrad = "0.6.2"
[features]
@@ -76,5 +76,16 @@ incremental = true
codegen-units = 256
rpath = false
[profile.release]
opt-level = 'z'
debug = false
debug-assertions = false
overflow-checks = false
lto = true
panic = 'unwind'
incremental = false
codegen-units = 16
rpath = false
[package.metadata.wasm-pack.profile.release]
wasm-opt = true

View File

@@ -1,6 +1,8 @@
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;
use std::fmt;
#[wasm_bindgen(raw_module = "../../js/libs/astro/coo.js")]
extern "C" {
#[wasm_bindgen(js_name = Format)]
@@ -26,11 +28,28 @@ extern "C" {
pub fn toDecimal(num: f64, prec: u8) -> String;
}
use std::cmp::Eq;
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
#[wasm_bindgen]
pub enum Formatter {
Sexagesimal,
Decimal
}
pub enum AngleSerializeFmt {
DMM,
DD,
DMS,
HMS,
}
impl fmt::Display for AngleSerializeFmt {
// This trait requires `fmt` with this exact signature.
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// Write strictly the first element into the supplied output
// stream: `f`. Returns `fmt::Result` which indicates whether the
// operation succeeded or failed. Note that `write!` uses syntax which
// is very similar to `println!`.
let str = match self {
Self::DMM => "DMM",
Self::DD => "DD",
Self::DMS => "DMS",
Self::HMS => "HMS",
};
write!(f, "{}", str)
}
}

View File

@@ -1,66 +1,119 @@
use cgmath::Matrix4;
pub trait CooBaseFloat: Sized + 'static {
const GALACTIC_TO_J2000: &'static Matrix4<Self>;
const J2000_TO_GALACTIC: &'static Matrix4<Self>;
const ID: &'static Matrix4<Self>;
}
const GAL2ICRS: &'static Matrix4<f64> = &Matrix4::new(
-0.44482972122205372312012370920248,
0.74698218398450941835110635824212,
0.49410943719710765017955928850141,
0.0,
-0.19807633727507056817237662907031,
0.45598381369115237931077906137440,
-0.86766613755716255824577781583414,
0.0,
-0.87343705195577915249273984034980,
-0.48383507361641838378786914298189,
-0.05487565771261968232908806948676,
0.0,
0.0,
0.0,
0.0,
1.0,
);
impl CooBaseFloat for f32 {
const GALACTIC_TO_J2000: &'static Matrix4<Self> = &Matrix4::new(
-0.444_829_64,
0.746_982_2,
0.494_109_42,
0.0,
-0.198_076_37,
0.455_983_8,
-0.867_666_1,
0.0,
-0.873_437_1,
-0.483_835,
-0.054_875_56,
0.0,
0.0,
0.0,
0.0,
1.0,
);
const ICRS2GAL: &'static Matrix4<f64> = &Matrix4::new(
-0.44482972122205372312012370920248,
-0.19807633727507056817237662907031,
-0.87343705195577915249273984034980,
0.0,
0.74698218398450941835110635824212,
0.45598381369115237931077906137440,
-0.48383507361641838378786914298189,
0.0,
0.49410943719710765017955928850141,
-0.86766613755716255824577781583414,
-0.05487565771261968232908806948676,
0.0,
0.0,
0.0,
0.0,
1.0,
);
const J2000_TO_GALACTIC: &'static Matrix4<Self> = &Matrix4::new(
-0.444_829_64,
-0.198_076_37,
-0.873_437_1,
0.0,
0.746_982_2,
0.455_983_8,
-0.483_835,
0.0,
0.494_109_42,
-0.867_666_1,
-0.054_875_56,
0.0,
0.0,
0.0,
0.0,
1.0,
);
const ID: &'static Matrix4<f64> = &Matrix4::new(
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
);
const ID: &'static Matrix4<Self> = &Matrix4::new(
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
);
}
impl CooBaseFloat for f64 {
const GALACTIC_TO_J2000: &'static Matrix4<Self> = &Matrix4::new(
-0.4448296299195045,
0.7469822444763707,
0.4941094279435681,
0.0,
-0.1980763734646737,
0.4559837762325372,
-0.867_666_148_981_161,
0.0,
-0.873437090247923,
-0.4838350155267381,
-0.0548755604024359,
0.0,
0.0,
0.0,
0.0,
1.0,
);
const J2000_TO_GALACTIC: &'static Matrix4<Self> = &Matrix4::new(
-0.4448296299195045,
-0.1980763734646737,
-0.873437090247923,
0.0,
0.7469822444763707,
0.4559837762325372,
-0.4838350155267381,
0.0,
0.4941094279435681,
-0.867_666_148_981_161,
-0.0548755604024359,
0.0,
0.0,
0.0,
0.0,
1.0,
);
const ID: &'static Matrix4<Self> = &Matrix4::new(
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
);
}
use cgmath::BaseFloat;
use serde::Deserialize;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Clone, Copy, PartialEq, Eq, Debug, Deserialize, Hash)]
pub enum CooSystem {
ICRS,
GAL,
ICRS = 0,
GAL = 1,
}
pub const NUM_COOSYSTEM: usize = 2;
impl CooSystem {
#[inline]
pub fn to(&self, coo_system: Self) -> &Matrix4<f64> {
pub fn to<S>(&self, coo_system: Self) -> &Matrix4<S>
where
S: BaseFloat + CooBaseFloat,
{
match (self, coo_system) {
(CooSystem::GAL, CooSystem::ICRS) => GAL2ICRS,
(CooSystem::ICRS, CooSystem::GAL) => ICRS2GAL,
(_, _) => ID,
(CooSystem::GAL, CooSystem::ICRS) => S::GALACTIC_TO_J2000,
(CooSystem::ICRS, CooSystem::GAL) => S::J2000_TO_GALACTIC,
(_, _) => S::ID,
}
}
}

View File

@@ -1,9 +1,12 @@
use wasm_bindgen::prelude::*;
use serde::{Deserialize, Serialize};
use crate::angle::Formatter;
use crate::angle_fmt::AngleSerializeFmt;
use super::color::ColorRGB;
#[wasm_bindgen]
#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GridCfg {
@@ -19,7 +22,7 @@ pub struct GridCfg {
#[serde(default = "default_enabled")]
pub enabled: Option<bool>,
#[serde(default = "default_fmt")]
pub fmt: Option<Formatter>,
pub fmt: Option<AngleSerializeFmt>,
}
fn default_labels() -> Option<bool> {
@@ -42,6 +45,6 @@ fn default_thickness() -> Option<f32> {
None
}
fn default_fmt() -> Option<Formatter> {
fn default_fmt() -> Option<AngleSerializeFmt> {
None
}

View File

@@ -29,7 +29,6 @@ use crate::coo_system::CooSystem;
#[derive(Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
#[wasm_bindgen]
pub struct HiPSProperties {
// Associated with the HiPS
url: String,
@@ -48,7 +47,6 @@ pub struct HiPSProperties {
hips_initial_fov: Option<f64>,
hips_initial_ra: Option<f64>,
hips_initial_dec: Option<f64>,
hips_cube_depth: Option<u32>,
// Parametrable by the user
#[allow(unused)]
@@ -80,11 +78,6 @@ impl HiPSProperties {
self.min_order
}
#[inline(always)]
pub fn get_cube_depth(&self) -> Option<u32> {
self.hips_cube_depth
}
#[inline(always)]
pub fn get_bitpix(&self) -> Option<i32> {
self.bitpix

View File

@@ -13,7 +13,7 @@ pub mod resources;
pub mod cell;
pub mod fov;
pub mod image;
pub mod angle;
pub mod angle_fmt;
pub trait Abort {
type Item;

View File

@@ -4,7 +4,7 @@ use super::color::{Color, ColorRGBA};
#[derive(Clone, Debug)]
#[wasm_bindgen]
pub struct MOCOptions {
pub struct MOC {
uuid: String,
pub line_width: f32,
pub perimeter: bool,
@@ -18,7 +18,7 @@ pub struct MOCOptions {
use crate::{color::ColorRGB, Abort};
use std::convert::TryInto;
#[wasm_bindgen]
impl MOCOptions {
impl MOC {
#[wasm_bindgen(constructor)]
pub fn new(
uuid: String,
@@ -42,7 +42,7 @@ impl MOCOptions {
}
};
let color = parse_color(hex_color, opacity);
let color = parse_color(hex_color, 1.0);
let fill_color = parse_color(fill_color, opacity);
Self {
@@ -58,13 +58,13 @@ impl MOCOptions {
}
}
impl MOCOptions {
impl MOC {
pub fn get_uuid(&self) -> &String {
&self.uuid
}
}
impl Default for MOCOptions {
impl Default for MOC {
fn default() -> Self {
Self {
uuid: String::from("moc"),

View File

@@ -19,7 +19,7 @@ futures = "0.3.25"
colorgrad = "0.6.2"
[dependencies.wasm-bindgen]
version = "0.2.92"
version = "0.2.79"
[dev-dependencies]
fontdue = "0.7.2"
@@ -38,7 +38,7 @@ webgl2 = [
]
[dependencies.web-sys]
version = "0.3.77"
version = "0.3.56"
features = [
'console',
'CssStyleDeclaration',
@@ -88,5 +88,16 @@ incremental = true
codegen-units = 256
rpath = false
[profile.release]
opt-level = 'z'
debug = false
debug-assertions = false
overflow-checks = false
lto = true
panic = 'unwind'
incremental = false
codegen-units = 16
rpath = false
[package.metadata.wasm-pack.profile.release]
wasm-opt = true

View File

@@ -19,18 +19,16 @@ where
}
}
}
use crate::texture::Tex3D;
use wasm_bindgen::JsValue;
use crate::texture::Texture2DArray;
impl<F> Image for Bitmap<F>
where
F: ImageFormat + Clone,
{
fn insert_into_3d_texture<T: Tex3D>(
&self,
textures: &T,
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
textures.tex_sub_image_3d_with_image_bitmap(offset.x, offset.y, offset.z, &self.image);
fn tex_sub_image_3d(&self, textures: &Texture2DArray, offset: &Vector3<i32>) -> Result<(), JsValue> {
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_u32_and_u32_and_image_bitmap(offset.x, offset.y, &self.image);
Ok(())
}

View File

@@ -17,28 +17,29 @@ where
}
}
use crate::image::format::ImageFormat;
use crate::image::Image;
use crate::texture::Tex3D;
use cgmath::Vector3;
use wasm_bindgen::JsValue;
use crate::image::format::ImageFormat;
use crate::image::Image;
use crate::texture::Texture2DArray;
impl<F> Image for Canvas<F>
where
F: ImageFormat,
{
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
textures.tex_sub_image_3d_with_html_canvas_element(
offset.x,
offset.y,
offset.z,
&self.canvas,
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_u32_and_u32_and_html_canvas_element(
offset.x,
offset.y,
&self.canvas,
);
Ok(())
}

View File

@@ -116,63 +116,64 @@ impl<'a> Fits<'a> {
}
}*/
use crate::{image::Image, texture::Tex3D};
use crate::image::Image;
use crate::Texture2DArray;
impl Image for Fits<'_> {
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
match &self.data {
Data::U8(data) => {
let view = unsafe { R8UI::view(&data) };
textures.tex_sub_image_3d_with_opt_array_buffer_view(
offset.x,
offset.y,
offset.z,
self.size.x,
self.size.y,
1,
Some(view.as_ref()),
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_array_buffer_view(
offset.x,
offset.y,
self.size.x,
self.size.y,
Some(view.as_ref()),
);
}
Data::I16(data) => {
let view = unsafe { R16I::view(&data) };
textures.tex_sub_image_3d_with_opt_array_buffer_view(
offset.x,
offset.y,
offset.z,
self.size.x,
self.size.y,
1,
Some(view.as_ref()),
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_array_buffer_view(
offset.x,
offset.y,
self.size.x,
self.size.y,
Some(view.as_ref()),
);
}
Data::I32(data) => {
let view = unsafe { R32I::view(&data) };
textures.tex_sub_image_3d_with_opt_array_buffer_view(
offset.x,
offset.y,
offset.z,
self.size.x,
self.size.y,
1,
Some(view.as_ref()),
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_array_buffer_view(
offset.x,
offset.y,
self.size.x,
self.size.y,
Some(view.as_ref()),
);
}
Data::F32(data) => {
let view = unsafe { R8UI::view(&std::slice::from_raw_parts(data.as_ptr() as *const u8, data.len() * 4)) };
textures.tex_sub_image_3d_with_opt_array_buffer_view(
offset.x,
offset.y,
offset.z,
self.size.x,
self.size.y,
1,
Some(view.as_ref()),
);
let view = unsafe { R32F::view(&data) };
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_array_buffer_view(
offset.x,
offset.y,
self.size.x,
self.size.y,
Some(view.as_ref()),
);
}
}

View File

@@ -41,7 +41,7 @@ impl ImageFormat for RGB8U {
const NUM_CHANNELS: usize = 3;
const FORMAT: u32 = WebGlRenderingCtx::RGB as u32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGB8 as i32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGB as i32;
const TYPE: u32 = WebGlRenderingCtx::UNSIGNED_BYTE;
const CHANNEL_TYPE: ChannelType = ChannelType::RGB8U;
@@ -71,7 +71,7 @@ impl ImageFormat for RGBA8U {
const NUM_CHANNELS: usize = 4;
const FORMAT: u32 = WebGlRenderingCtx::RGBA as u32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGBA8 as i32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGBA as i32;
const TYPE: u32 = WebGlRenderingCtx::UNSIGNED_BYTE;
const CHANNEL_TYPE: ChannelType = ChannelType::RGBA8U;
@@ -152,13 +152,21 @@ impl ImageFormat for RGB32F {
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
pub struct R32F;
impl ImageFormat for R32F {
type P = [u8; 4];
type P = [f32; 1];
const NUM_CHANNELS: usize = 4;
const NUM_CHANNELS: usize = 1;
const FORMAT: u32 = WebGlRenderingCtx::RGBA as u32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGBA8 as i32;
const TYPE: u32 = WebGlRenderingCtx::UNSIGNED_BYTE;
#[cfg(feature = "webgl2")]
const FORMAT: u32 = WebGlRenderingCtx::RED as u32;
#[cfg(feature = "webgl1")]
const FORMAT: u32 = WebGlRenderingCtx::LUMINANCE as u32;
#[cfg(feature = "webgl2")]
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::R32F as i32;
#[cfg(feature = "webgl1")]
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::LUMINANCE as i32;
const TYPE: u32 = WebGlRenderingCtx::FLOAT;
const CHANNEL_TYPE: ChannelType = ChannelType::R32F;
@@ -166,31 +174,41 @@ impl ImageFormat for R32F {
Ok(Bytes::Borrowed(raw_bytes))
}
type ArrayBufferView = js_sys::Uint8Array;
type ArrayBufferView = js_sys::Float32Array;
unsafe fn view(s: &[<Self::P as Pixel>::Item]) -> Self::ArrayBufferView {
Self::ArrayBufferView::view(s)
}
}
#[cfg(feature = "webgl2")]
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
pub struct R64F;
#[cfg(feature = "webgl2")]
impl ImageFormat for R64F {
type P = [u8; 4];
type P = [f32; 1];
const NUM_CHANNELS: usize = 4;
const NUM_CHANNELS: usize = 1;
const FORMAT: u32 = WebGlRenderingCtx::RGBA as u32;
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::RGBA8 as i32;
const TYPE: u32 = WebGlRenderingCtx::UNSIGNED_BYTE;
#[cfg(feature = "webgl2")]
const FORMAT: u32 = WebGlRenderingCtx::RED as u32;
#[cfg(feature = "webgl1")]
const FORMAT: u32 = WebGlRenderingCtx::LUMINANCE as u32;
const CHANNEL_TYPE: ChannelType = ChannelType::R32F;
#[cfg(feature = "webgl2")]
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::R32F as i32;
#[cfg(feature = "webgl1")]
const INTERNAL_FORMAT: i32 = WebGlRenderingCtx::LUMINANCE as i32;
const TYPE: u32 = WebGlRenderingCtx::FLOAT;
const CHANNEL_TYPE: ChannelType = ChannelType::R64F;
fn decode(raw_bytes: &[u8]) -> Result<Bytes<'_>, &'static str> {
Ok(Bytes::Borrowed(raw_bytes))
}
type ArrayBufferView = js_sys::Uint8Array;
type ArrayBufferView = js_sys::Float32Array;
unsafe fn view(s: &[<Self::P as Pixel>::Item]) -> Self::ArrayBufferView {
Self::ArrayBufferView::view(s)
@@ -291,18 +309,6 @@ pub enum ChannelType {
R32I,
}
impl ChannelType {
pub fn is_colored(&self) -> bool {
match self {
ChannelType::RGBA32F
| ChannelType::RGB32F
| ChannelType::RGBA8U
| ChannelType::RGB8U => true,
_ => false,
}
}
}
pub const NUM_CHANNELS: usize = 9;
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
@@ -321,6 +327,12 @@ impl ImageFormatType {
}
pub fn is_colored(&self) -> bool {
self.channel.is_colored()
match self.channel {
ChannelType::RGBA32F
| ChannelType::RGB32F
| ChannelType::RGBA8U
| ChannelType::RGB8U => true,
_ => false,
}
}
}

View File

@@ -17,28 +17,29 @@ where
}
}
use crate::image::format::ImageFormat;
use crate::image::Image;
use crate::texture::Tex3D;
use cgmath::Vector3;
use wasm_bindgen::JsValue;
use crate::image::format::ImageFormat;
use crate::image::Image;
use crate::texture::Texture2DArray;
impl<F> Image for HTMLImage<F>
where
F: ImageFormat,
{
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
textures.tex_sub_image_3d_with_html_image_element(
offset.x,
offset.y,
offset.z,
&self.image,
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_u32_and_u32_and_html_image_element(
offset.x,
offset.y,
&self.image,
);
Ok(())
}

View File

@@ -181,12 +181,13 @@ impl ArrayBuffer for ArrayF64 {
use self::canvas::Canvas;
use self::html::HTMLImage;
use super::Texture2DArray;
use wasm_bindgen::JsValue;
pub trait Image {
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue>;
@@ -196,15 +197,15 @@ impl<'a, I> Image for &'a I
where
I: Image,
{
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
let image = &**self;
image.insert_into_3d_texture(textures, offset)?;
image.tex_sub_image_3d(textures, offset)?;
Ok(())
}
@@ -215,20 +216,22 @@ impl<I> Image for Rc<I>
where
I: Image,
{
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
let image = &**self;
image.insert_into_3d_texture(textures, offset)?;
image.tex_sub_image_3d(textures, offset)?;
Ok(())
}
}
use crate::Abort;
use std::sync::{Arc, Mutex};
/*impl<I> Image for Arc<Mutex<Option<I>>>
where
I: Image,
@@ -250,10 +253,7 @@ where
#[cfg(feature = "webgl2")]
use crate::image::format::{R16I, R32I, R64F, R8UI};
use crate::{
image::format::{R32F, RGB8U, RGBA8U},
texture::Tex3D,
};
use crate::image::format::{R32F, RGB8U, RGBA8U};
use bitmap::Bitmap;
use fits::Fits;
@@ -290,10 +290,10 @@ pub enum ImageType {
use cgmath::Vector3;
impl Image for ImageType {
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
@@ -307,23 +307,19 @@ impl Image for ImageType {
let mut bytes_reader = Cursor::new(raw_bytes.as_slice());
let fits_img = Fits::from_byte_slice(&mut bytes_reader)?;
fits_img.insert_into_3d_texture(textures, offset)?
fits_img.tex_sub_image_3d(textures, offset)?
}
ImageType::Canvas { canvas } => canvas.insert_into_3d_texture(textures, offset)?,
ImageType::ImageRgba8u { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::ImageRgb8u { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::HTMLImageRgba8u { image } => {
image.insert_into_3d_texture(textures, offset)?
}
ImageType::HTMLImageRgb8u { image } => {
image.insert_into_3d_texture(textures, offset)?
}
ImageType::RawRgb8u { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::RawRgba8u { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::RawR32f { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::RawR32i { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::RawR16i { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::RawR8ui { image } => image.insert_into_3d_texture(textures, offset)?,
ImageType::Canvas { canvas } => canvas.tex_sub_image_3d(textures, offset)?,
ImageType::ImageRgba8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::ImageRgb8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::HTMLImageRgba8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::HTMLImageRgb8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawRgb8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawRgba8u { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawR32f { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawR32i { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawR16i { image } => image.tex_sub_image_3d(textures, offset)?,
ImageType::RawR8ui { image } => image.tex_sub_image_3d(textures, offset)?,
}
Ok(())

View File

@@ -1,6 +1,5 @@
use crate::image::format::ImageFormat;
use crate::texture::pixel::Pixel;
use crate::texture::Tex3D;
#[derive(Debug)]
#[allow(dead_code)]
pub struct ImageBuffer<T>
@@ -32,14 +31,10 @@ where
Self { data, size }
}
pub fn from_encoded_raw_bytes(
raw_bytes: &[u8],
width: i32,
height: i32,
) -> Result<Self, JsValue> {
pub fn from_encoded_raw_bytes(raw_bytes: &[u8], width: i32, height: i32) -> Result<Self, JsValue> {
let mut decoded_bytes = match T::decode(raw_bytes).map_err(|e| JsValue::from_str(e))? {
Bytes::Borrowed(bytes) => bytes.to_vec(),
Bytes::Owned(bytes) => bytes,
Bytes::Owned(bytes) => bytes
};
let decoded_pixels = unsafe {
@@ -85,7 +80,12 @@ where
ImageBuffer::<T>::new(data, width, height)
}
pub fn tex_sub(&mut self, src: &Self, s: &ImageBufferView, d: &ImageBufferView) {
pub fn tex_sub(
&mut self,
src: &Self,
s: &ImageBufferView,
d: &ImageBufferView,
) {
let mut di = d.x;
let mut dj = d.y;
@@ -138,29 +138,30 @@ pub enum ImageBufferType {
}
use crate::image::{ArrayBuffer, Image};
use crate::Texture2DArray;
use cgmath::{Vector2, Vector3};
impl<I> Image for ImageBuffer<I>
where
I: ImageFormat,
{
fn insert_into_3d_texture<T: Tex3D>(
fn tex_sub_image_3d(
&self,
// The texture array
textures: &T,
textures: &Texture2DArray,
// An offset to write the image in the texture array
offset: &Vector3<i32>,
) -> Result<(), JsValue> {
let js_array =
<<<I as ImageFormat>::P as Pixel>::Container as ArrayBuffer>::new(&self.data);
textures.tex_sub_image_3d_with_opt_array_buffer_view(
offset.x,
offset.y,
offset.z,
self.width(),
self.height(),
1,
Some(js_array.as_ref()),
);
textures[offset.z as usize]
.bind()
.tex_sub_image_2d_with_i32_and_i32_and_u32_and_type_and_opt_array_buffer_view(
offset.x,
offset.y,
self.size.x,
self.size.y,
Some(js_array.as_ref()),
);
Ok(())
}

Some files were not shown because too many files have changed in this diff Show More