thatcher / openseadragon

This project has moved to its new github organization at github.com/openseadragon, please join us!
http://openseadragon,github.com/
37 stars 14 forks source link

Add support for layers of tiles that can be turned off and on at runtime #2

Closed josh1093 closed 11 years ago

josh1093 commented 12 years ago

A use case for this feature would be a geographic map with several layers of information that could be turned off and on via an external widget.

It would be possible to achieve this with the current HTML overlays, but if the layers are large raster files themselves then it's not practical to add them using tags.

I've a taken a quick (hacky) cut at adding this functionality in a fork: http://github.com/josh1093/openseadragon

Basically what I've done is add a collection of Drawer objects to Viewer. Each layer has it's own TileSource and Drawer. When it's updating the Viewer updates each layer's Drawer. For this to work each added layer's TileSource must be the same size as the original. I'm not sure if this is be the best approach but it's a feature I'd like to see.

thatcher commented 12 years ago

Hey Josh, just noticed your issue tickets, Thanks!

I need to take a little time to review the commits and get back to you. I'm not actually a really great project manager and do a lot of other work so please don't be discouraged if I don't get back to you in the next coule days though I will commit to either integrating these or giving you feedback about what would be required to be changed for integration within a week. I have a core use case at the Library of Congress that is actually driving this 'work outside of work' but I have also made sure to scope the work to make it as generally useful as possible.

Thank you for you contributions!

josh1093 commented 12 years ago

No worries. Time-wise my availability is also off and on over the next while. Thanks for taking the time to do some cleanup/organization on openseadragon.

thatcher commented 12 years ago

On review I see the difference between using Overlays and what you are describing which is, functionally speaking, a lower Layers implementation for the TileSource, and still basically appropriately handled by the Drawer for rendering. It also turns out that this work is very helpful for being able to achieve things like side-by-side views of two tile sources or vertical scrolling of 'pages' etc.

It might take me a couple weeks but I'll integrate this into the base, maybe with modification but I'll make sure to communicate with you during the process for feedback.

Thanks again, Thatcher

josh1093 commented 12 years ago

Awesome! By all means, communicate away. What I've got in my fork definitely needs improvement if the feature were to be made for public consumption. I just wanted to have some code to help explain what I'm talking about.

thatcher commented 12 years ago

I havent forgotten you or this feature, I'll be getting to it shortly, hopefully in this week. Sorry for the delay.

dgutman commented 11 years ago

Is there a working fork somewhere with this functionality enabled and/or is this something that may get merged in the near future?

thatcher commented 11 years ago

josh again I'm writing to remind you I havent forgotten this. the sequence and collection work has consumed my free time along with a major increase in my work load at my 9-5 (which is now 9-9). I added a basic multi drawer implementation to my local code base over this weekend. I'm looking for a few sources that might serve as a nicer example of this. Can you point me to one?

The first thing im going to commit, this week for sure, is a basic example without support for ui integration of layer selection. Once we iron out the semantics we'll nail down the ui components.

Thanks, Thatcher

dgutman commented 11 years ago

ok-- so if you need multiple slides with the same space but different colors let me know--- I have some multicolor data from our fluorescent microscope that would work...

On Mon, Jan 28, 2013 at 4:17 PM, Chris Thatcher notifications@github.comwrote:

josh again I'm writing to remind you I havent forgotten this. the sequence and collection work has consumed my free time along with a major increase in my work load at my 9-5 (which is now 9-9). I added a basic multi drawer implementation to my local code base over this weekend. I'm looking for a few sources that might serve as a nicer example of this. Can you point me to one?

The first thing im going to commit, this week for sure, is a basic example without support for ui integration of layer selection. Once we iron out the semantics we'll nail down the ui components.

Thanks, Thatcher

— Reply to this email directly or view it on GitHubhttps://github.com/thatcher/openseadragon/issues/2#issuecomment-12805299.

David A Gutman, M.D. Ph.D. Assistant Professor of Biomedical Informatics Senior Research Scientist, Center for Comprehensive Informatics Emory University School of Medicine

thatcher commented 11 years ago

I found some great public tile sources that offer a compelling example for layers and actually serve as good examples individually for how to implement custom tile sources. It brought up some other issues I started sorting out last night including the way that png alpha channels can create some flickering the way we currently blend. Stay tuned, I should have a working example up on the site within a week or so.

thatcher commented 11 years ago

just you can see some real progress finally, take a peak at our custom tile source examples that we'll use for the layers first demo:

http://thatcher.github.com/openseadragon/examples/tilesource-custom/

I'll be adding a layers feature page soon which shows these layers on top of each other. again the ui components for control will come second.

(ps i would like to get access to one or two of the microscope photography examples you have because Im a huge fan of macroscopic photography and its history)

dgutman commented 11 years ago

So i will work on cleaning this up this --- and hopefully someone can tell me how /where I can add a className to the actual tiled part of the container so I don't turn the entire damn canvas red--- right now I am operating on the entire #container DIV....

http://node15.cci.emory.edu/OSD_DEMOS/

So this will probably only work in Chrome (for now) but I have successfully applied SVG based filters to the canvas and can very quickly/nimbly set contrast/brightness/hue/etc.. For at least a decently sized subset of these transformations... similar filters can be used for IE, Safari, and Mozilla.... just haven't played around yet

Most importantly for my application is that I can also basically do anything to the color map I want.... basically the way our microscope works is that for fluorescent images everything is monochrome.. so basically if we have a piece of tissue stained with red, blue and green fluorsecent dyes... it takes 3 pictures and then the software will basically pseudo-color each grayscale channel to make a normal looking image..

So basically what I am hoping to do is if I can load 3 (or more) channels as individual layers, and also each set of tiles has it's own classname/id/div/whatever associated with it, I can individually tweak the color palette/brightness of each layer... and these SVG transformations are extremely fast....

We just purchased a whole slide digital fluorescent scanner, so I am hoping to have (and of course share) whatever cool images we can acquire... still just trying to figure out how to use the scope!

ALSO..

http://cancer.digitalslidearchive.net has like 20,000 or so traditional brightfield cancer images--- that link is the seadragon/FLEX based version but I am about 80% of the way done porting the while thing to openseadragon....

And also all of the URL's can (or will) be exposed so you can grab the DZI images for any of these image-s-- this was part of the whole cross-domain validation problem I was banging by head against.. as I develop/screw around on a different machine than where the 5 terabytes of DZI images are..

On a related issue--- I am trying to port over seajax-utils so I can draw overlays--- is there any current functionality in openseadragon to do much more than draw a rectangle? If not as soon as I get the code working (or when I get stuck) I will post some examples and/or create a pull request..

On Wed, Jan 30, 2013 at 8:45 PM, Chris Thatcher notifications@github.comwrote:

just you can see some real progress finally, take a peak at our custom tile source examples that we'll use for the layers first demo:

http://thatcher.github.com/openseadragon/examples/tilesource-custom/

I'll be adding a layers feature page soon which shows these layers on top of each other. again the ui components for control will come second.

(ps i would like to get access to one or two of the microscope photography examples you have because Im a huge fan of macroscopic photography and its history)

— Reply to this email directly or view it on GitHubhttps://github.com/thatcher/openseadragon/issues/2#issuecomment-12923310.

David A Gutman, M.D. Ph.D. Assistant Professor of Biomedical Informatics Senior Research Scientist, Center for Comprehensive Informatics Emory University School of Medicine

thatcher commented 11 years ago

Moving this issue to new openseadragon org:

https://github.com/openseadragon/openseadragon/issues/13