TextureCache

Since v9.0
public static class TextureCache
An application-wide cache of textures whose pixels live in memory rather than in a file on disk.

Rhino identifies a texture by a name. Normally that name is the path of an image file, but it does not have to be: a name registered here shadows the file system, so any texture that refers to the name - a Texture, a DisplayMaterial, a Material - draws the pixels registered here instead of reading a file.

Calling Set(string, Bitmap) again with the same name replaces the pixels in place.

Remarks: The cache is per-session and per-application, not per-document: names are shared by every open document and nothing here is saved in the 3dm file. Entries are held until Remove(string) is called, so a tool that creates names dynamically should remove the ones it is finished with.
var bitmap = new System.Drawing.Bitmap(512, 512);
// ...paint into bitmap...
Rhino.Display.TextureCache.Set("MyPaintTool:canvas", bitmap);
material.SetBitmapTexture("MyPaintTool:canvas");
doc.Views.Redraw();

Methods

Contains

#Since v9.0
public static bool Contains(string name)
Determines whether a texture is registered under the given name.
name (string)The name to look for.
true if a texture is registered under this name.

GetSize

#Since v9.0
public static Size GetSize(string name)
Gets the pixel size of the texture registered under the given name.
name (string)The name to look for.
The size of the texture, or Size.Empty if nothing is registered under this name.

Remove

#Since v9.0
public static bool Remove(string name)
Removes the texture registered under the given name and frees its pixels.

Anything still pointing at the name falls back to looking for an image file called that, so remove a name only once nothing is drawing it.

name (string)The name to remove.
true if a texture was registered under this name and has been removed.

Set

#Since v9.0
public static bool Set(string name, Bitmap bitmap)
Registers, or replaces the pixels of, the in-memory texture with the given name.

The bitmap's pixels are copied, so the caller stays free to keep painting into the same bitmap and call this again. Replacing the pixels of a name that is already in use invalidates the copy the display holds on the GPU, so the new pixels appear on the next redraw of any viewport that draws the texture.

name (string)The name to register the pixels under. Any string will do as long as it is used consistently; prefixing it with something specific to your tool avoids colliding with another plug-in, or with a real image file path. Comparison is case-insensitive and treats forward and back slashes as equivalent, the same as texture file paths.
bitmap (Bitmap)The pixels to use.
true on success.