mirror of
https://github.com/cds-astro/aladin-lite.git
synced 2026-04-28 11:53:18 -07:00
refact querying ressources (moc, tiles, allsky map)
This commit is contained in:
committed by
Matthieu Baumann
parent
f9722a69ff
commit
9ea92b3bff
@@ -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, backgroundColor: 'rgba(0, 0, 0, 255)'});
|
||||
|
||||
aladin.displayFITS(
|
||||
//'https://fits.gsfc.nasa.gov/samples/FOCx38i0101t_c0f.fits', // url of the fits file
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use crate::downloader::request::moc::MOCRequest;
|
||||
use crate::downloader::request::tile::TileRequest;
|
||||
use crate::math::angle::ToAngle;
|
||||
use crate::math::spectra::Freq;
|
||||
use crate::renderable::hips::HiPS;
|
||||
@@ -119,7 +121,7 @@ use crate::time::Time;
|
||||
use cgmath::InnerSpace;
|
||||
|
||||
use crate::downloader::query;
|
||||
use crate::downloader::request;
|
||||
use crate::downloader::request::{self, RequestType};
|
||||
use al_api::resources::Resources;
|
||||
|
||||
impl App {
|
||||
@@ -393,7 +395,6 @@ impl App {
|
||||
}*/
|
||||
}
|
||||
|
||||
use crate::downloader::request::Resource;
|
||||
use al_api::cell::HEALPixCellProjeted;
|
||||
|
||||
use crate::healpix::cell::HEALPixCell;
|
||||
@@ -596,24 +597,26 @@ impl App {
|
||||
|
||||
for rsc in rscs_received {
|
||||
match rsc {
|
||||
Resource::Tile(tile) => {
|
||||
RequestType::Tile(tile) => {
|
||||
//if !_has_camera_zoomed {
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(tile.get_hips_cdid()) {
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(&tile.hips_cdid) {
|
||||
let cfg = hips.get_config_mut();
|
||||
|
||||
if cfg.get_format() == tile.format {
|
||||
let fov_coverage = self.camera.get_cov(cfg.get_frame());
|
||||
let included_in_coverage = fov_coverage.intersects_cell(tile.cell());
|
||||
let included_in_coverage = fov_coverage.intersects_cell(&tile.cell);
|
||||
|
||||
//let is_tile_root = tile.cell().depth() == delta_depth;
|
||||
//let _depth = tile.cell().depth();
|
||||
// do not perform tex_sub costly GPU calls while the camera is zooming
|
||||
if tile.cell().is_root() || included_in_coverage {
|
||||
if tile.cell.is_root() || included_in_coverage {
|
||||
let image = tile.request.get_data().clone();
|
||||
|
||||
//if let Some(image) = image.as_ref() {
|
||||
if let Some(ImageType::FitsRawBytes {
|
||||
raw_bytes: raw_bytes_buf,
|
||||
..
|
||||
}) = &*tile.image.borrow()
|
||||
}) = &*image.clone().borrow()
|
||||
{
|
||||
// check if the metadata has not been set
|
||||
if hips.get_fits_params().is_none() {
|
||||
@@ -629,7 +632,6 @@ impl App {
|
||||
}
|
||||
};
|
||||
|
||||
let image = tile.image.clone();
|
||||
if let Some(img) = &*image.borrow() {
|
||||
/*if tile_copied {
|
||||
self.downloader
|
||||
@@ -641,13 +643,15 @@ impl App {
|
||||
self.request_redraw = true;
|
||||
//tile_copied = true;
|
||||
match hips {
|
||||
HiPS::D2(hips) => {
|
||||
hips.add_tile(&tile.cell, img, tile.time_req)?
|
||||
}
|
||||
HiPS::D2(hips) => hips.add_tile(
|
||||
&tile.cell,
|
||||
img,
|
||||
tile.request.time_request,
|
||||
)?,
|
||||
HiPS::D3(hips) => hips.add_tile(
|
||||
&tile.cell,
|
||||
img,
|
||||
tile.time_req,
|
||||
tile.request.time_request,
|
||||
tile.channel.unwrap() as u16,
|
||||
)?,
|
||||
}
|
||||
@@ -657,10 +661,8 @@ impl App {
|
||||
}
|
||||
}
|
||||
}
|
||||
Resource::Allsky(allsky) => {
|
||||
let hips_cdid = allsky.get_hips_cdid();
|
||||
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(hips_cdid) {
|
||||
RequestType::Allsky(allsky) => {
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(&allsky.hips_cdid) {
|
||||
let is_missing = allsky.missing();
|
||||
if is_missing {
|
||||
// The allsky image is missing so we donwload all the tiles contained into
|
||||
@@ -678,12 +680,12 @@ impl App {
|
||||
}
|
||||
}
|
||||
}
|
||||
Resource::Moc(fetched_moc) => {
|
||||
let moc_hips_cdid = fetched_moc.get_hips_cdid();
|
||||
RequestType::Moc(moc) => {
|
||||
let moc_hips_cdid = moc.hips_cdid;
|
||||
//let url = &moc_url[..moc_url.find("/Moc.fits").unwrap_abort()];
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(moc_hips_cdid) {
|
||||
let request::moc::FetchedMoc { moc, .. } = fetched_moc;
|
||||
if let Some(moc) = &*moc.borrow() {
|
||||
if let Some(hips) = self.layers.get_mut_hips_from_cdid(&moc_hips_cdid) {
|
||||
let MOCRequest { request, .. } = moc;
|
||||
if let Some(moc) = &*request.get_data().borrow() {
|
||||
match (hips, moc) {
|
||||
(HiPS::D2(hips), Moc::Space(moc)) => {
|
||||
hips.set_moc(moc.clone());
|
||||
|
||||
@@ -10,13 +10,13 @@ pub struct Downloader {
|
||||
requests: Vec<RequestType>,
|
||||
queried_list: HashSet<QueryId>,
|
||||
|
||||
cache: Cache<QueryId, Resource>,
|
||||
cache: Cache<QueryId, RequestType>,
|
||||
}
|
||||
|
||||
use crate::fifo_cache::Cache;
|
||||
|
||||
use query::Query;
|
||||
use request::{RequestType, Resource};
|
||||
use request::RequestType;
|
||||
|
||||
impl Default for Downloader {
|
||||
fn default() -> Self {
|
||||
@@ -62,26 +62,23 @@ impl Downloader {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_received_resources(&mut self) -> Vec<Resource> {
|
||||
pub fn get_received_resources(&mut self) -> Vec<RequestType> {
|
||||
let mut rscs = vec![];
|
||||
let mut not_finished_requests = vec![];
|
||||
|
||||
let mut finished_query_list = vec![];
|
||||
self.requests = self
|
||||
.requests
|
||||
.drain(..)
|
||||
.filter(|request| {
|
||||
// If the request resolves into a resource
|
||||
if let Some(rsc) = request.into() {
|
||||
rscs.push(rsc);
|
||||
finished_query_list.push(request.id().clone());
|
||||
|
||||
false
|
||||
// The request is not resolved, we keep it
|
||||
} else {
|
||||
true
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
while let Some(request) = self.requests.pop() {
|
||||
if request.is_resolved() {
|
||||
finished_query_list.push(request.id().clone());
|
||||
rscs.push(request);
|
||||
// The request is not resolved, we keep it
|
||||
} else {
|
||||
not_finished_requests.push(request);
|
||||
}
|
||||
}
|
||||
|
||||
self.requests = not_finished_requests;
|
||||
|
||||
for query_id in finished_query_list.into_iter() {
|
||||
self.queried_list.remove(&query_id);
|
||||
@@ -98,7 +95,7 @@ impl Downloader {
|
||||
self.queried_list.contains(id)
|
||||
}
|
||||
|
||||
pub fn delay(&mut self, r: Resource) {
|
||||
/*pub fn delay(&mut self, r: RequestType) {
|
||||
match r {
|
||||
Resource::Tile(tile) => {
|
||||
let k = format!(
|
||||
@@ -111,5 +108,5 @@ impl Downloader {
|
||||
}
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -14,7 +14,13 @@ pub struct AllskyRequest {
|
||||
pub id: QueryId,
|
||||
pub channel: Option<u32>,
|
||||
|
||||
request: Request<Vec<ImageType>>,
|
||||
pub request: Request<Vec<ImageType>>,
|
||||
}
|
||||
|
||||
impl AllskyRequest {
|
||||
pub fn missing(&self) -> bool {
|
||||
self.request.data.borrow().is_none()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<AllskyRequest> for RequestType {
|
||||
@@ -297,56 +303,5 @@ use al_core::texture::format::RGBA8U;
|
||||
use crate::time::Time;
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
pub struct Allsky {
|
||||
pub image: Rc<RefCell<Option<Vec<ImageType>>>>,
|
||||
pub time_req: Time,
|
||||
//pub depth_tile: u8,
|
||||
pub hips_cdid: CreatorDid,
|
||||
url: Url,
|
||||
pub channel: Option<u32>,
|
||||
}
|
||||
|
||||
use crate::Abort;
|
||||
|
||||
impl Allsky {
|
||||
pub fn missing(&self) -> bool {
|
||||
self.image.borrow().is_none()
|
||||
}
|
||||
|
||||
pub fn get_hips_cdid(&self) -> &CreatorDid {
|
||||
&self.hips_cdid
|
||||
}
|
||||
|
||||
pub fn get_url(&self) -> &Url {
|
||||
&self.url
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a AllskyRequest> for Option<Allsky> {
|
||||
fn from(request: &'a AllskyRequest) -> Self {
|
||||
let AllskyRequest {
|
||||
request,
|
||||
hips_cdid,
|
||||
//depth_tile,
|
||||
url,
|
||||
channel,
|
||||
..
|
||||
} = request;
|
||||
if request.is_resolved() {
|
||||
let Request::<Vec<ImageType>> {
|
||||
time_request, data, ..
|
||||
} = request;
|
||||
Some(Allsky {
|
||||
time_req: *time_request,
|
||||
// This is a clone on a Arc, it is supposed to be fast
|
||||
image: data.clone(),
|
||||
hips_cdid: hips_cdid.clone(),
|
||||
url: url.clone(),
|
||||
//depth_tile: *depth_tile,
|
||||
channel: *channel,
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ pub struct MOCRequest {
|
||||
//pub id: QueryId,
|
||||
pub hips_cdid: CreatorDid,
|
||||
pub params: MOCOptions,
|
||||
request: Request<Moc>,
|
||||
pub request: Request<Moc>,
|
||||
}
|
||||
|
||||
impl From<MOCRequest> for RequestType {
|
||||
@@ -68,6 +68,10 @@ impl From<query::Moc> for MOCRequest {
|
||||
DataproductType::SpectralCube => {
|
||||
Moc::FreqSpace(FreqSpaceMoc::from_fits_raw_bytes(&bytes)?)
|
||||
}
|
||||
DataproductType::Cube => {
|
||||
let moc = SpaceMoc::from_fits_raw_bytes(&bytes)?;
|
||||
Moc::FreqSpace(FreqSpaceMoc::from_space_moc(moc))
|
||||
}
|
||||
_ => Moc::Space(SpaceMoc::from_fits_raw_bytes(&bytes)?),
|
||||
})
|
||||
});
|
||||
@@ -84,36 +88,3 @@ impl From<query::Moc> for MOCRequest {
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
pub struct FetchedMoc {
|
||||
pub moc: Rc<RefCell<Option<Moc>>>,
|
||||
pub params: MOCOptions,
|
||||
pub hips_cdid: Url,
|
||||
}
|
||||
|
||||
impl FetchedMoc {
|
||||
pub fn get_hips_cdid(&self) -> &Url {
|
||||
&self.hips_cdid
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a MOCRequest> for Option<FetchedMoc> {
|
||||
fn from(request: &'a MOCRequest) -> Self {
|
||||
let MOCRequest {
|
||||
request,
|
||||
hips_cdid,
|
||||
params,
|
||||
..
|
||||
} = request;
|
||||
if request.is_resolved() {
|
||||
let Request::<Moc> { data, .. } = request;
|
||||
Some(FetchedMoc {
|
||||
// This is a clone on a Arc, it is supposed to be fast
|
||||
moc: data.clone(),
|
||||
hips_cdid: hips_cdid.clone(),
|
||||
params: params.clone(),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ use std::cell::{Cell, RefCell};
|
||||
use std::rc::Rc;
|
||||
pub type Url = String;
|
||||
pub struct Request<R> {
|
||||
data: Rc<RefCell<Option<R>>>,
|
||||
time_request: Time,
|
||||
pub data: Rc<RefCell<Option<R>>>,
|
||||
pub time_request: Time,
|
||||
// Flag telling if the tile has been copied so that
|
||||
// the HtmlImageElement can be reused to download another tile
|
||||
//ready: bool,
|
||||
@@ -75,6 +75,10 @@ where
|
||||
pub fn resolve_status(&self) -> ResolvedStatus {
|
||||
self.resolved.get()
|
||||
}
|
||||
|
||||
pub fn get_data(&self) -> Rc<RefCell<Option<R>>> {
|
||||
self.data.clone()
|
||||
}
|
||||
}
|
||||
|
||||
use allsky::AllskyRequest;
|
||||
@@ -83,7 +87,7 @@ use tile::TileRequest;
|
||||
pub enum RequestType {
|
||||
Tile(TileRequest),
|
||||
Allsky(AllskyRequest),
|
||||
Moc(MOCRequest), //..
|
||||
Moc(MOCRequest),
|
||||
}
|
||||
|
||||
use crate::downloader::QueryId;
|
||||
@@ -95,30 +99,30 @@ impl RequestType {
|
||||
RequestType::Moc(request) => &request.hips_cdid,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_resolved(&self) -> bool {
|
||||
match self {
|
||||
RequestType::Tile(request) => request.request.is_resolved(),
|
||||
RequestType::Allsky(request) => request.request.is_resolved(),
|
||||
RequestType::Moc(request) => request.request.is_resolved(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a RequestType> for Option<Resource> {
|
||||
fn from(request: &'a RequestType) -> Self {
|
||||
/*
|
||||
impl From<RequestType> for Option<Resource> {
|
||||
fn from(request: RequestType) -> Self {
|
||||
match request {
|
||||
RequestType::Tile(request) => Option::<Tile>::from(request).map(Resource::Tile),
|
||||
RequestType::Allsky(request) => Option::<Allsky>::from(request).map(Resource::Allsky),
|
||||
RequestType::Moc(request) => Option::<FetchedMoc>::from(request).map(Resource::Moc),
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
use crate::Abort;
|
||||
use allsky::Allsky;
|
||||
use tile::Tile;
|
||||
pub enum Resource {
|
||||
Tile(Tile),
|
||||
Allsky(Allsky),
|
||||
Moc(FetchedMoc),
|
||||
}
|
||||
|
||||
use web_sys::RequestCredentials;
|
||||
|
||||
use self::moc::FetchedMoc;
|
||||
async fn query_html_image(
|
||||
url: &str,
|
||||
credentials: RequestCredentials,
|
||||
|
||||
@@ -11,14 +11,14 @@ use super::{Request, RequestType};
|
||||
use crate::downloader::request::query_html_image;
|
||||
use crate::downloader::QueryId;
|
||||
pub struct TileRequest {
|
||||
request: Request<ImageType>,
|
||||
pub request: Request<ImageType>,
|
||||
pub id: QueryId,
|
||||
|
||||
cell: HEALPixCell,
|
||||
hips_cdid: CreatorDid,
|
||||
url: Url,
|
||||
format: ImageFormatType,
|
||||
channel: Option<u32>,
|
||||
pub cell: HEALPixCell,
|
||||
pub hips_cdid: CreatorDid,
|
||||
pub url: Url,
|
||||
pub format: ImageFormatType,
|
||||
pub channel: Option<u32>,
|
||||
}
|
||||
|
||||
impl From<TileRequest> for RequestType {
|
||||
@@ -121,66 +121,5 @@ impl From<query::Tile> for TileRequest {
|
||||
use crate::time::Time;
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
pub struct Tile {
|
||||
pub image: Rc<RefCell<Option<ImageType>>>,
|
||||
pub time_req: Time,
|
||||
pub cell: HEALPixCell,
|
||||
pub format: ImageFormatType,
|
||||
pub channel: Option<u32>,
|
||||
hips_cdid: CreatorDid,
|
||||
url: Url,
|
||||
}
|
||||
|
||||
use crate::Abort;
|
||||
impl Tile {
|
||||
#[inline(always)]
|
||||
pub fn missing(&self) -> bool {
|
||||
self.image.borrow().is_none()
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn get_hips_cdid(&self) -> &CreatorDid {
|
||||
&self.hips_cdid
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn get_url(&self) -> &Url {
|
||||
&self.url
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn cell(&self) -> &HEALPixCell {
|
||||
&self.cell
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a TileRequest> for Option<Tile> {
|
||||
fn from(request: &'a TileRequest) -> Self {
|
||||
let TileRequest {
|
||||
cell,
|
||||
request,
|
||||
hips_cdid,
|
||||
url,
|
||||
format,
|
||||
channel,
|
||||
..
|
||||
} = request;
|
||||
if request.is_resolved() {
|
||||
let Request::<ImageType> {
|
||||
time_request, data, ..
|
||||
} = request;
|
||||
Some(Tile {
|
||||
cell: *cell,
|
||||
time_req: *time_request,
|
||||
// This is a clone on a Arc, it is supposed to be fast
|
||||
image: data.clone(),
|
||||
hips_cdid: hips_cdid.clone(),
|
||||
url: url.clone(),
|
||||
format: *format,
|
||||
channel: *channel,
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,12 @@ use std::io::Cursor;
|
||||
use crate::math::spectra::Freq;
|
||||
use crate::math::spectra::SpectralUnit;
|
||||
impl FreqSpaceMoc {
|
||||
/// Create a FreqSpaceMoc from a
|
||||
pub fn from_space_moc(moc: SpaceMoc) -> Self {
|
||||
let moc_2d = Moc2DRanges::new(vec![0..u64::MAX], vec![moc.0.into_moc_ranges().0]);
|
||||
FreqSpaceMoc(HpxRanges2D(moc_2d))
|
||||
}
|
||||
|
||||
pub fn from_fits_raw_bytes(bytes: &[u8]) -> Result<Self, JsValue> {
|
||||
let sfmoc = match fits::from_fits_ivoa_custom(Cursor::new(bytes), true)
|
||||
.map_err(|e| JsValue::from_str(&e.to_string()))?
|
||||
@@ -138,9 +144,8 @@ impl FreqSpaceMoc {
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub fn intersects_cell(&self, hpx_cell: &HEALPixCell, f: Freq) -> bool {
|
||||
pub fn intersects_cell(&self, hpx_cell: &HEALPixCell, f_hash: u64) -> bool {
|
||||
let z29_rng = hpx_cell.z_29_rng();
|
||||
let f_hash = f.hash();
|
||||
|
||||
self.0.contains(f_hash, &z29_rng)
|
||||
}
|
||||
@@ -152,6 +157,8 @@ impl FreqSpaceMoc {
|
||||
}
|
||||
|
||||
use core::ops::Deref;
|
||||
|
||||
use super::SpaceMoc;
|
||||
impl Deref for FreqSpaceMoc {
|
||||
type Target = moclib::hpxranges2d::FreqSpaceMoc<u64, u64>;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ use std::collections::HashMap;
|
||||
|
||||
use al_core::texture::format::PixelType;
|
||||
|
||||
use crate::downloader::request::allsky::AllskyRequest;
|
||||
use crate::renderable::hips::HpxTile;
|
||||
use cgmath::Vector3;
|
||||
|
||||
@@ -18,7 +19,6 @@ use al_core::WebGlContext;
|
||||
|
||||
use super::texture::{HpxTexture2D, HpxTexture2DUniforms};
|
||||
|
||||
use crate::downloader::request::allsky::Allsky;
|
||||
use crate::healpix::cell::HEALPixCell;
|
||||
use crate::healpix::cell::NUM_HPX_TILES_DEPTH_ZERO;
|
||||
use crate::renderable::hips::config::HiPSConfig;
|
||||
@@ -218,16 +218,14 @@ fn create_hpx_texture_storage(
|
||||
}
|
||||
|
||||
impl HiPS2DBuffer {
|
||||
pub fn push_allsky(&mut self, allsky: Allsky) -> Result<(), JsValue> {
|
||||
let Allsky {
|
||||
image, time_req, ..
|
||||
} = allsky;
|
||||
pub fn push_allsky(&mut self, allsky: AllskyRequest) -> Result<(), JsValue> {
|
||||
let AllskyRequest { request, .. } = allsky;
|
||||
|
||||
{
|
||||
let mutex_locked = image.borrow();
|
||||
let mutex_locked = request.data.borrow();
|
||||
let images = mutex_locked.as_ref().unwrap_abort();
|
||||
for (idx, image) in images.iter().enumerate() {
|
||||
self.push(&HEALPixCell(0, idx as u64), image, time_req)?;
|
||||
self.push(&HEALPixCell(0, idx as u64), image, request.time_request)?;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ pub mod texture;
|
||||
|
||||
use crate::app::BLENDING_ANIM_DURATION;
|
||||
use crate::downloader::query;
|
||||
use crate::downloader::request::allsky::AllskyRequest;
|
||||
use crate::math::angle::ToAngle;
|
||||
use crate::renderable::hips::HpxTile;
|
||||
use al_api::hips::ImageExt;
|
||||
@@ -32,7 +33,6 @@ use crate::camera::CameraViewPort;
|
||||
use crate::shader::ShaderManager;
|
||||
use crate::utils;
|
||||
|
||||
use crate::downloader::request::allsky::Allsky;
|
||||
use crate::healpix::{cell::HEALPixCell, moc::SpaceMoc};
|
||||
use crate::time::Time;
|
||||
|
||||
@@ -698,7 +698,7 @@ impl HiPS2D {
|
||||
self.buffer.push(cell, image, time_request)
|
||||
}
|
||||
|
||||
pub fn add_allsky(&mut self, allsky: Allsky) -> Result<(), JsValue> {
|
||||
pub fn add_allsky(&mut self, allsky: AllskyRequest) -> Result<(), JsValue> {
|
||||
self.buffer.push_allsky(allsky)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use al_core::image::Image;
|
||||
use al_core::WebGlContext;
|
||||
|
||||
use super::texture::HpxTexture3D;
|
||||
use crate::downloader::request::allsky::Allsky;
|
||||
use crate::downloader::request::allsky::AllskyRequest;
|
||||
use crate::healpix::cell::HEALPixCell;
|
||||
use crate::renderable::hips::config::HiPSConfig;
|
||||
use crate::renderable::hips::HpxTileBuffer;
|
||||
@@ -40,23 +40,22 @@ impl HiPSCubeBuffer {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn push_allsky(&mut self, allsky: Allsky) -> Result<(), JsValue> {
|
||||
let Allsky {
|
||||
image,
|
||||
time_req,
|
||||
pub fn push_allsky(&mut self, allsky: AllskyRequest) -> Result<(), JsValue> {
|
||||
let AllskyRequest {
|
||||
request,
|
||||
//depth_tile,
|
||||
channel,
|
||||
..
|
||||
} = allsky;
|
||||
|
||||
{
|
||||
let mutex_locked = image.borrow();
|
||||
let mutex_locked = request.data.borrow();
|
||||
let images = mutex_locked.as_ref().unwrap_abort();
|
||||
for (idx, image) in images.iter().enumerate() {
|
||||
self.push(
|
||||
&HEALPixCell(0, idx as u64),
|
||||
image,
|
||||
time_req,
|
||||
request.time_request,
|
||||
channel.map(|c| c as u16).unwrap_or(0),
|
||||
)?;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
pub mod cube;
|
||||
pub mod texture;
|
||||
|
||||
use crate::downloader::request::allsky::AllskyRequest;
|
||||
use crate::healpix::moc::FreqSpaceMoc;
|
||||
use crate::math::spectra::SpectralUnit;
|
||||
use crate::renderable::hips::HpxTile;
|
||||
@@ -28,7 +29,6 @@ use crate::downloader::query;
|
||||
|
||||
use crate::shader::ShaderManager;
|
||||
|
||||
use crate::downloader::request::allsky::Allsky;
|
||||
use crate::healpix::cell::HEALPixCell;
|
||||
use crate::time::Time;
|
||||
|
||||
@@ -214,11 +214,12 @@ impl HiPS3D {
|
||||
.get_hpx_cells(depth_tile, survey_frame)
|
||||
.into_iter()
|
||||
.filter(move |tile_cell| {
|
||||
if let Some(moc) = self.moc.as_ref() {
|
||||
moc.intersects_cell(tile_cell, self.freq)
|
||||
/*if let Some(moc) = self.moc.as_ref() {
|
||||
moc.intersects_cell(tile_cell, self.freq.0 as u64)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}*/
|
||||
true
|
||||
});
|
||||
|
||||
Some(tile_cells_iter)
|
||||
@@ -299,7 +300,7 @@ impl HiPS3D {
|
||||
for cell in &self.hpx_cells_in_view {
|
||||
// filter textures that are not in the moc
|
||||
let cell = if let Some(moc) = self.moc.as_ref() {
|
||||
if moc.intersects_cell(cell, self.freq) {
|
||||
if moc.intersects_cell(cell, self.freq.0 as u64) {
|
||||
Some(&cell)
|
||||
} else if channel == PixelType::RGB8U {
|
||||
// Rasterizer does not render tiles that are not in the MOC
|
||||
@@ -601,7 +602,7 @@ impl HiPS3D {
|
||||
self.buffer.push(cell, image, time_request, slice_idx)
|
||||
}
|
||||
|
||||
pub fn add_allsky(&mut self, allsky: Allsky) -> Result<(), JsValue> {
|
||||
pub fn add_allsky(&mut self, allsky: AllskyRequest) -> Result<(), JsValue> {
|
||||
self.buffer.push_allsky(allsky)
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ pub mod uv;
|
||||
|
||||
pub use d2::HiPS2D;
|
||||
|
||||
use crate::downloader::request::allsky::Allsky;
|
||||
use crate::downloader::request::allsky::AllskyRequest;
|
||||
use crate::renderable::HiPSConfig;
|
||||
use crate::time::Time;
|
||||
use crate::CameraViewPort;
|
||||
@@ -145,7 +145,7 @@ impl HiPS {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn add_allsky(&mut self, allsky: Allsky) -> Result<(), JsValue> {
|
||||
pub fn add_allsky(&mut self, allsky: AllskyRequest) -> Result<(), JsValue> {
|
||||
match self {
|
||||
HiPS::D2(hips) => hips.add_allsky(allsky),
|
||||
HiPS::D3(hips) => hips.add_allsky(allsky),
|
||||
|
||||
Reference in New Issue
Block a user