Well logs family: tracks, curves and log canvases

Overview

Base Control: WellLogCanvas
Namespace: Beep.Skia.WellLogs

The WellLogCanvas is the root control for this diagram family. It inherits MaterialControl and provides shared port management, styling, and template methods for all nodes in the family.

This family contains 6 node types.

Node Types

Node ClassShapeDescription
WellLogModelsN/A (data layer)LAS 2.0/3.0 and DLIS/RP66 file parsing. Curve data models, well header, and metadata.
WellLogCanvasCanvas containerMain canvas with depth range, track management, grid display, and zoom/scroll.
WellLogLayoutEngineN/A (layout)Track layout calculation: widths, headers, depth grids, curve scaling.
WellLogRendererN/A (rendering)SkiaSharp-based renderer for curves, fills, lithology patterns, and annotations.
WellLogBrushLibraryN/A (styling)Pre-built brush/fill patterns for lithology: sandstone, shale, limestone, etc.
WellLogTemplatesN/A (templates)Pre-configured track templates: Gamma Ray, Resistivity, Density, Neutron, Sonic.

WellLogModels

LAS 2.0/3.0 and DLIS/RP66 file parsing. Curve data models, well header, and metadata.

ShapeN/A (data layer)
Input PortsN/A
Output PortsN/A

WellLogCanvas

Main canvas with depth range, track management, grid display, and zoom/scroll.

ShapeCanvas container
Input PortsN/A
Output PortsN/A

WellLogLayoutEngine

Track layout calculation: widths, headers, depth grids, curve scaling.

ShapeN/A (layout)
Input PortsN/A
Output PortsN/A

WellLogRenderer

SkiaSharp-based renderer for curves, fills, lithology patterns, and annotations.

ShapeN/A (rendering)
Input PortsN/A
Output PortsN/A

WellLogBrushLibrary

Pre-built brush/fill patterns for lithology: sandstone, shale, limestone, etc.

ShapeN/A (styling)
Input PortsN/A
Output PortsN/A

WellLogTemplates

Pre-configured track templates: Gamma Ray, Resistivity, Density, Neutron, Sonic.

ShapeN/A (templates)
Input PortsN/A
Output PortsN/A

Connection Points

Every node in this family exposes connection points (ports) for linking to other nodes. Port positions are computed lazily by LayoutPorts(), which runs when MarkPortsDirty() flags the layout as stale after a move or resize.

Node ClassInput PortsOutput PortsExtra
WellLogModelsN/AN/A—
WellLogCanvasN/AN/A—
WellLogLayoutEngineN/AN/A—
WellLogRendererN/AN/A—
WellLogBrushLibraryN/AN/A—
WellLogTemplatesN/AN/A—

Connection Conventions

When building diagrams with this family, follow these conventions:

  • Depth axis runs from top (shallow) to bottom (deep)
  • Multiple tracks share the same depth column
  • Curves are displayed per-track with independent scales

Usage Example

Complete example showing creation, node placement, and connection:

C# Example

// Load LAS file
var lasData = WellLogModels.LoadFromLas("well.las");

// Create canvas
var canvas = new WellLogCanvas
{
    X = 50, Y = 50,
    Width = 800, Height = 600,
    DepthStart = 0,
    DepthEnd = 5000
};

// Configure tracks
var track1 = new WellLogTemplates.GammaRayTrack();
var track2 = new WellLogTemplates.ResistivityTrack();
canvas.AddTrack(track1);
canvas.AddTrack(track2);

// Set data and render
canvas.SetData(lasData);
var renderer = new WellLogRenderer(canvas);
renderer.Render(surface, canvas);