@genart-dev/plugin-distribution 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -0
- package/dist/index.cjs +903 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +872 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/preview-layer.ts","../src/voronoi-layer.ts","../src/density-layer.ts","../src/distribution-tools.ts"],"sourcesContent":["import type { DesignPlugin, PluginContext } from \"@genart-dev/core\";\nimport { previewLayerType } from \"./preview-layer.js\";\nimport { voronoiLayerType } from \"./voronoi-layer.js\";\nimport { densityLayerType } from \"./density-layer.js\";\nimport { distributionMcpTools } from \"./distribution-tools.js\";\n\nconst distributionPlugin: DesignPlugin = {\n id: \"distribution\",\n name: \"Distribution & Packing\",\n version: \"0.1.0\",\n tier: \"free\",\n description:\n \"Spatial distribution algorithms (Poisson disk, phyllotaxis, hex grid, DLA, WFC, and more) plus circle/rect packing. Includes guide layers for non-destructive distribution previews.\",\n layerTypes: [previewLayerType, voronoiLayerType, densityLayerType],\n tools: [],\n exportHandlers: [],\n mcpTools: distributionMcpTools,\n async initialize(_context: PluginContext): Promise<void> {},\n dispose(): void {},\n};\n\nexport default distributionPlugin;\nexport { distributionPlugin };\nexport { previewLayerType, voronoiLayerType, densityLayerType };\nexport { distributionMcpTools };\n","import type {\n LayerTypeDefinition,\n LayerPropertySchema,\n LayerProperties,\n LayerBounds,\n RenderResources,\n} from \"@genart-dev/core\";\n\nconst PREVIEW_PROPERTIES: LayerPropertySchema[] = [\n { key: \"algorithm\", label: \"Algorithm\", type: \"string\", default: \"poisson-disk\", group: \"distribution\" },\n { key: \"params\", label: \"Parameters (JSON)\", type: \"string\", default: \"{}\", group: \"distribution\" },\n { key: \"dotSize\", label: \"Dot Size\", type: \"number\", default: 3, min: 0.5, max: 20, step: 0.5, group: \"style\" },\n { key: \"dotColor\", label: \"Dot Color\", type: \"color\", default: \"#0088ff\", group: \"style\" },\n { key: \"opacity\", label: \"Opacity\", type: \"number\", default: 0.6, min: 0, max: 1, step: 0.01, group: \"style\" },\n { key: \"_points\", label: \"Points (JSON)\", type: \"string\", default: \"[]\", group: \"data\" },\n];\n\nexport const previewLayerType: LayerTypeDefinition = {\n typeId: \"distribution:preview\",\n displayName: \"Distribution Preview\",\n icon: \"scatter_plot\",\n category: \"guide\",\n properties: PREVIEW_PROPERTIES,\n propertyEditorId: \"distribution:preview-editor\",\n\n createDefault(): LayerProperties {\n return {\n algorithm: \"poisson-disk\",\n params: \"{}\",\n dotSize: 3,\n dotColor: \"#0088ff\",\n opacity: 0.6,\n _points: \"[]\",\n };\n },\n\n render(\n properties: LayerProperties,\n ctx: CanvasRenderingContext2D,\n bounds: LayerBounds,\n _resources: RenderResources,\n ): void {\n const points = JSON.parse(String(properties._points || \"[]\")) as Array<{ x: number; y: number }>;\n if (points.length === 0) return;\n\n const dotSize = Number(properties.dotSize ?? 3);\n const dotColor = String(properties.dotColor ?? \"#0088ff\");\n const opacity = Number(properties.opacity ?? 0.6);\n\n ctx.save();\n ctx.globalAlpha = opacity;\n ctx.fillStyle = dotColor;\n\n const scaleX = bounds.width;\n const scaleY = bounds.height;\n\n for (const pt of points) {\n const x = bounds.x + pt.x * scaleX;\n const y = bounds.y + pt.y * scaleY;\n ctx.beginPath();\n ctx.arc(x, y, dotSize, 0, Math.PI * 2);\n ctx.fill();\n }\n\n ctx.restore();\n },\n\n validate(): null { return null; },\n};\n","import type {\n LayerTypeDefinition,\n LayerPropertySchema,\n LayerProperties,\n LayerBounds,\n RenderResources,\n} from \"@genart-dev/core\";\n\nconst VORONOI_PROPERTIES: LayerPropertySchema[] = [\n { key: \"strokeColor\", label: \"Edge Color\", type: \"color\", default: \"#333333\", group: \"style\" },\n { key: \"strokeWidth\", label: \"Edge Width\", type: \"number\", default: 1, min: 0.5, max: 5, step: 0.5, group: \"style\" },\n { key: \"fillColor\", label: \"Fill Color\", type: \"color\", default: \"transparent\", group: \"style\" },\n { key: \"opacity\", label: \"Opacity\", type: \"number\", default: 0.7, min: 0, max: 1, step: 0.01, group: \"style\" },\n { key: \"_cells\", label: \"Cells (JSON)\", type: \"string\", default: \"[]\", group: \"data\" },\n];\n\ntype VoronoiVertex = { x: number; y: number };\ntype VoronoiCell = { vertices: VoronoiVertex[] };\n\nexport const voronoiLayerType: LayerTypeDefinition = {\n typeId: \"distribution:voronoi\",\n displayName: \"Voronoi Overlay\",\n icon: \"hexagon\",\n category: \"guide\",\n properties: VORONOI_PROPERTIES,\n propertyEditorId: \"distribution:voronoi-editor\",\n\n createDefault(): LayerProperties {\n return {\n strokeColor: \"#333333\",\n strokeWidth: 1,\n fillColor: \"transparent\",\n opacity: 0.7,\n _cells: \"[]\",\n };\n },\n\n render(\n properties: LayerProperties,\n ctx: CanvasRenderingContext2D,\n bounds: LayerBounds,\n _resources: RenderResources,\n ): void {\n const cells = JSON.parse(String(properties._cells || \"[]\")) as VoronoiCell[];\n if (cells.length === 0) return;\n\n const strokeColor = String(properties.strokeColor ?? \"#333333\");\n const strokeWidth = Number(properties.strokeWidth ?? 1);\n const fillColor = String(properties.fillColor ?? \"transparent\");\n const opacity = Number(properties.opacity ?? 0.7);\n\n ctx.save();\n ctx.globalAlpha = opacity;\n ctx.strokeStyle = strokeColor;\n ctx.lineWidth = strokeWidth;\n\n for (const cell of cells) {\n const verts = cell.vertices;\n if (verts.length < 3) continue;\n ctx.beginPath();\n ctx.moveTo(bounds.x + verts[0]!.x, bounds.y + verts[0]!.y);\n for (let i = 1; i < verts.length; i++) {\n ctx.lineTo(bounds.x + verts[i]!.x, bounds.y + verts[i]!.y);\n }\n ctx.closePath();\n if (fillColor !== \"transparent\") {\n ctx.fillStyle = fillColor;\n ctx.fill();\n }\n ctx.stroke();\n }\n\n ctx.restore();\n },\n\n validate(): null { return null; },\n};\n","import type {\n LayerTypeDefinition,\n LayerPropertySchema,\n LayerProperties,\n LayerBounds,\n RenderResources,\n} from \"@genart-dev/core\";\n\nconst DENSITY_PROPERTIES: LayerPropertySchema[] = [\n { key: \"radius\", label: \"Kernel Radius\", type: \"number\", default: 30, min: 5, max: 100, step: 5, group: \"density\" },\n { key: \"colormap\", label: \"Color Map\", type: \"string\", default: \"viridis\", group: \"style\" },\n { key: \"opacity\", label: \"Opacity\", type: \"number\", default: 0.65, min: 0, max: 1, step: 0.01, group: \"style\" },\n { key: \"_points\", label: \"Points (JSON)\", type: \"string\", default: \"[]\", group: \"data\" },\n];\n\n// Simple 5-stop colormaps: [t in 0..1] → [r,g,b] each 0..255\nconst COLORMAPS: Record<string, Array<[number, number, number]>> = {\n viridis: [[68,1,84],[59,82,139],[33,144,141],[93,201,99],[253,231,37]],\n plasma: [[13,8,135],[156,23,158],[237,121,83],[240,249,33],[252,230,25]],\n inferno: [[0,0,4],[120,28,109],[238,125,51],[252,225,31],[252,255,164]],\n hot: [[0,0,0],[160,0,0],[255,80,0],[255,200,0],[255,255,255]],\n cool: [[0,255,255],[64,191,255],[128,128,255],[191,64,255],[255,0,255]],\n};\n\nfunction colormapLookup(name: string, t: number): [number, number, number] {\n const stops = (COLORMAPS[name] ?? COLORMAPS[\"viridis\"]) as Array<[number, number, number]>;\n const scaled = t * (stops.length - 1);\n const lo = Math.floor(scaled), hi = Math.min(lo + 1, stops.length - 1);\n const f = scaled - lo;\n const slo = stops[lo] as [number, number, number];\n const shi = stops[hi] as [number, number, number];\n return [\n Math.round(slo[0] + f * (shi[0] - slo[0])),\n Math.round(slo[1] + f * (shi[1] - slo[1])),\n Math.round(slo[2] + f * (shi[2] - slo[2])),\n ];\n}\n\nexport const densityLayerType: LayerTypeDefinition = {\n typeId: \"distribution:density\",\n displayName: \"Density Map\",\n icon: \"gradient\",\n category: \"guide\",\n properties: DENSITY_PROPERTIES,\n propertyEditorId: \"distribution:density-editor\",\n\n createDefault(): LayerProperties {\n return { radius: 30, colormap: \"viridis\", opacity: 0.65, _points: \"[]\" };\n },\n\n render(\n properties: LayerProperties,\n ctx: CanvasRenderingContext2D,\n bounds: LayerBounds,\n _resources: RenderResources,\n ): void {\n const points = JSON.parse(String(properties._points || \"[]\")) as Array<{ x: number; y: number }>;\n if (points.length === 0) return;\n\n const radius = Number(properties.radius ?? 30);\n const colormap = String(properties.colormap ?? \"viridis\");\n const opacity = Number(properties.opacity ?? 0.65);\n\n const w = Math.floor(bounds.width);\n const h = Math.floor(bounds.height);\n if (w <= 0 || h <= 0) return;\n\n // Kernel Density Estimation on a downsampled grid\n const scale = 0.25; // 1/4 resolution for performance\n const gw = Math.max(1, Math.floor(w * scale));\n const gh = Math.max(1, Math.floor(h * scale));\n const density = new Float32Array(gw * gh);\n const gr = radius * scale;\n const gr2 = gr * gr;\n\n for (const pt of points) {\n const px = pt.x * gw;\n const py = pt.y * gh;\n const minX = Math.max(0, Math.floor(px - gr));\n const maxX = Math.min(gw - 1, Math.ceil(px + gr));\n const minY = Math.max(0, Math.floor(py - gr));\n const maxY = Math.min(gh - 1, Math.ceil(py + gr));\n for (let gy = minY; gy <= maxY; gy++) {\n for (let gx = minX; gx <= maxX; gx++) {\n const dx = gx - px, dy = gy - py;\n const d2 = dx * dx + dy * dy;\n if (d2 < gr2) {\n const idx2 = gy * gw + gx;\n density[idx2] = (density[idx2] ?? 0) + (1 - d2 / gr2);\n }\n }\n }\n }\n\n let maxD = 0;\n for (let i = 0; i < density.length; i++) if ((density[i] ?? 0) > maxD) maxD = density[i] ?? 0;\n if (maxD === 0) return;\n\n // Render via ImageData at low res, then scale up\n const imgData = ctx.createImageData(gw, gh);\n for (let i = 0; i < gw * gh; i++) {\n const t = (density[i] ?? 0) / maxD;\n const [r, g, b] = colormapLookup(colormap, t);\n imgData.data[i * 4] = r;\n imgData.data[i * 4 + 1] = g;\n imgData.data[i * 4 + 2] = b;\n imgData.data[i * 4 + 3] = t > 0 ? Math.round(t * 200) : 0;\n }\n\n // Draw to offscreen, scale up\n const offscreen = new OffscreenCanvas(gw, gh);\n const octx = offscreen.getContext(\"2d\")!;\n octx.putImageData(imgData, 0, 0);\n\n ctx.save();\n ctx.globalAlpha = opacity;\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(offscreen, bounds.x, bounds.y, bounds.width, bounds.height);\n ctx.restore();\n },\n\n validate(): null { return null; },\n};\n","import type {\n McpToolDefinition,\n McpToolContext,\n McpToolResult,\n JsonSchema,\n} from \"@genart-dev/core\";\n\nfunction textResult(text: string): McpToolResult {\n return { content: [{ type: \"text\", text }] };\n}\n\nfunction errorResult(text: string): McpToolResult {\n return { content: [{ type: \"text\", text }], isError: true };\n}\n\n/** Seeded PRNG (mulberry32) */\nfunction makePrng(seed: number) {\n let s = (seed | 0) >>> 0;\n return function rng() {\n s += 0x6d2b79f5;\n let t = s;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nfunction poissonDisk(\n rng: () => number,\n width: number,\n height: number,\n minDist: number,\n maxAttempts = 30,\n): Array<{ x: number; y: number }> {\n const cellSize = minDist / Math.SQRT2;\n const cols = Math.ceil(width / cellSize);\n const rows = Math.ceil(height / cellSize);\n const grid = new Array<number>(cols * rows).fill(-1);\n const pts: Array<[number, number]> = [];\n const active: number[] = [];\n\n function addPt(x: number, y: number) {\n const i = pts.length;\n pts.push([x, y]);\n active.push(i);\n grid[Math.floor(y / cellSize) * cols + Math.floor(x / cellSize)] = i;\n }\n addPt(rng() * width, rng() * height);\n\n while (active.length > 0) {\n const ri = Math.floor(rng() * active.length);\n const pi = active[ri]!;\n const p = pts[pi]!;\n let found = false;\n for (let a = 0; a < maxAttempts; a++) {\n const angle = rng() * Math.PI * 2;\n const dist = minDist + rng() * minDist;\n const nx = p[0] + Math.cos(angle) * dist;\n const ny = p[1] + Math.sin(angle) * dist;\n if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;\n const gx = Math.floor(nx / cellSize);\n const gy = Math.floor(ny / cellSize);\n let ok = true;\n for (let dx = -2; dx <= 2 && ok; dx++) {\n for (let dy = -2; dy <= 2 && ok; dy++) {\n const ngx = gx + dx, ngy = gy + dy;\n if (ngx < 0 || ngx >= cols || ngy < 0 || ngy >= rows) continue;\n const ni = grid[ngy * cols + ngx];\n if (ni === undefined || ni === -1) continue;\n const q = pts[ni]!;\n const ddx = q[0] - nx, ddy = q[1] - ny;\n if (ddx * ddx + ddy * ddy < minDist * minDist) ok = false;\n }\n }\n if (ok) { addPt(nx, ny); found = true; break; }\n }\n if (!found) active.splice(ri, 1);\n }\n return pts.map(([x, y]) => ({ x, y }));\n}\n\nexport const distributePointsTool: McpToolDefinition = {\n name: \"distribute_points\",\n description:\n \"Generate a spatial distribution of points using a named algorithm (poisson-disk, phyllotaxis, hex-grid, jittered-grid, and more). Returns the point array and count.\",\n inputSchema: {\n type: \"object\",\n properties: {\n algorithm: {\n type: \"string\",\n enum: [\n \"poisson-disk\", \"phyllotaxis\", \"hex-grid\", \"tri-grid\", \"jittered-grid\",\n \"r2-sequence\", \"halton\", \"best-candidate\",\n \"latin-hypercube\", \"lloyd-relax\",\n ],\n description: \"Distribution algorithm\",\n },\n width: { type: \"number\", description: \"Canvas width in pixels\" },\n height: { type: \"number\", description: \"Canvas height in pixels\" },\n params: {\n type: \"object\",\n description: \"Algorithm-specific parameters (minDist, count, size, jitter, etc.)\",\n additionalProperties: true,\n },\n seed: { type: \"number\", description: \"PRNG seed for reproducibility\" },\n },\n required: [\"algorithm\", \"width\", \"height\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const algorithm = String(input.algorithm);\n const width = Number(input.width);\n const height = Number(input.height);\n const params = (input.params as Record<string, number>) ?? {};\n const rng = makePrng(Number(input.seed ?? 0));\n\n let points: Array<{ x: number; y: number; size?: number; index?: number }> = [];\n\n switch (algorithm) {\n case \"poisson-disk\": {\n const minDist = params.minDist ?? 20;\n const raw = poissonDisk(rng, width, height, minDist, params.maxAttempts ?? 30);\n points = raw.map((p, i) => ({ ...p, size: 1, index: i }));\n break;\n }\n\n case \"phyllotaxis\": {\n const n = params.count ?? 200;\n const PHI = Math.PI * (3 - Math.sqrt(5));\n const scale = params.scale ?? Math.min(width, height) / 2;\n for (let i = 0; i < n; i++) {\n const r = Math.sqrt(i / n) * scale;\n const theta = i * PHI;\n points.push({ x: width / 2 + r * Math.cos(theta), y: height / 2 + r * Math.sin(theta), size: 1, index: i });\n }\n break;\n }\n\n case \"hex-grid\": {\n const size = params.size ?? 20;\n const colW = size * 1.5, rowH = size * Math.sqrt(3);\n let idx = 0;\n for (let col = 0; col <= Math.ceil(width / colW); col++) {\n for (let row = 0; row <= Math.ceil(height / rowH); row++) {\n const x = col * colW;\n const y = row * rowH + (col % 2 === 1 ? rowH / 2 : 0);\n if (x <= width && y <= height) points.push({ x, y, size, index: idx++ });\n }\n }\n break;\n }\n\n case \"tri-grid\": {\n const size = params.size ?? 20;\n const rowH = size * Math.sqrt(3) / 2;\n let idx = 0;\n for (let row = 0; row * rowH <= height; row++) {\n const offset = (row % 2 === 1) ? size / 2 : 0;\n for (let col = 0; col * size + offset <= width; col++) {\n points.push({ x: col * size + offset, y: row * rowH, size, index: idx++ });\n }\n }\n break;\n }\n\n case \"jittered-grid\": {\n const size = params.size ?? 30;\n const jitter = params.jitter ?? 0.5;\n let idx = 0;\n for (let row = 0; row * size < height; row++) {\n for (let col = 0; col * size < width; col++) {\n points.push({\n x: (col + 0.5 + (rng() - 0.5) * jitter) * size,\n y: (row + 0.5 + (rng() - 0.5) * jitter) * size,\n size: 1, index: idx++,\n });\n }\n }\n break;\n }\n\n case \"r2-sequence\": {\n const n = params.count ?? 100;\n const g = 1.32471795724474602596;\n const a1 = 1 / g, a2 = 1 / (g * g);\n for (let i = 0; i < n; i++) {\n points.push({ x: ((0.5 + a1 * i) % 1) * width, y: ((0.5 + a2 * i) % 1) * height, size: 1, index: i });\n }\n break;\n }\n\n case \"halton\": {\n const n = params.count ?? 100;\n function haltonBase(i: number, base: number) {\n let f = 1, r = 0;\n while (i > 0) { f /= base; r += f * (i % base); i = Math.floor(i / base); }\n return r;\n }\n for (let i = 0; i < n; i++) {\n points.push({ x: haltonBase(i + 1, 2) * width, y: haltonBase(i + 1, 3) * height, size: 1, index: i });\n }\n break;\n }\n\n case \"best-candidate\": {\n const n = params.count ?? 100;\n const k = params.candidates ?? 10;\n for (let i = 0; i < n; i++) {\n let bestX = 0, bestY = 0, bestDist = -1;\n for (let c = 0; c < k; c++) {\n const cx = rng() * width, cy = rng() * height;\n let minD = Infinity;\n for (const pt of points) {\n const dx = cx - pt.x, dy = cy - (pt.y ?? 0);\n const d = dx * dx + dy * dy;\n if (d < minD) minD = d;\n }\n if (points.length === 0) minD = Infinity;\n if (minD > bestDist) { bestDist = minD; bestX = cx; bestY = cy; }\n }\n points.push({ x: bestX, y: bestY, size: 1, index: i });\n }\n break;\n }\n\n case \"latin-hypercube\": {\n const n = params.count ?? 100;\n const xs = Array.from({ length: n }, (_, i) => i);\n const ys = Array.from({ length: n }, (_, i) => i);\n for (let i = n - 1; i > 0; i--) {\n const j = Math.floor(rng() * (i + 1));\n [xs[i], xs[j]] = [xs[j]!, xs[i]!];\n const k2 = Math.floor(rng() * (i + 1));\n [ys[i], ys[k2]] = [ys[k2]!, ys[i]!];\n }\n const cellW = width / n, cellH = height / n;\n for (let i = 0; i < n; i++) {\n points.push({ x: (xs[i]! + rng()) * cellW, y: (ys[i]! + rng()) * cellH, size: 1, index: i });\n }\n break;\n }\n\n default: {\n const n = params.count ?? 100;\n for (let i = 0; i < n; i++) {\n points.push({ x: rng() * width, y: rng() * height, size: 1, index: i });\n }\n }\n }\n\n return textResult(JSON.stringify({\n points,\n count: points.length,\n bounds: { x: 0, y: 0, width, height },\n }));\n },\n};\n\nexport const packCirclesTool: McpToolDefinition = {\n name: \"pack_circles\",\n description:\n \"Pack non-overlapping circles within a region using trial-and-reject sampling. Returns (x, y, radius) tuples and coverage percentage.\",\n inputSchema: {\n type: \"object\",\n properties: {\n width: { type: \"number\" },\n height: { type: \"number\" },\n minRadius: { type: \"number\", default: 5 },\n maxRadius: { type: \"number\", default: 50 },\n count: { type: \"number\", default: 100 },\n padding: { type: \"number\", default: 2 },\n seed: { type: \"number\", default: 0 },\n },\n required: [\"width\", \"height\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const width = Number(input.width);\n const height = Number(input.height);\n const minRadius = Number(input.minRadius ?? 5);\n const maxRadius = Number(input.maxRadius ?? 50);\n const count = Number(input.count ?? 100);\n const padding = Number(input.padding ?? 2);\n const rng = makePrng(Number(input.seed ?? 0));\n\n const circles: Array<{ x: number; y: number; radius: number; index: number }> = [];\n const maxAttempts = 500;\n\n for (let c = 0; c < count; c++) {\n for (let a = 0; a < maxAttempts; a++) {\n const r = minRadius + rng() * (maxRadius - minRadius);\n const x = r + padding + rng() * (width - 2 * r - 2 * padding);\n const y = r + padding + rng() * (height - 2 * r - 2 * padding);\n if (x < 0 || y < 0) continue;\n let ok = true;\n for (const ci of circles) {\n const dx = x - ci.x, dy = y - ci.y;\n if (dx * dx + dy * dy < (r + ci.radius + padding) ** 2) { ok = false; break; }\n }\n if (ok) { circles.push({ x, y, radius: r, index: circles.length }); break; }\n }\n }\n\n const area = circles.reduce((acc, c) => acc + Math.PI * c.radius * c.radius, 0);\n return textResult(JSON.stringify({\n circles,\n count: circles.length,\n coverage: area / (width * height),\n }));\n },\n};\n\nexport const packRectsTool: McpToolDefinition = {\n name: \"pack_rects\",\n description:\n \"Pack rectangles into a bin using the guillotine algorithm. Returns placements with x, y, width, height, and rotated flag.\",\n inputSchema: {\n type: \"object\",\n properties: {\n rects: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: { w: { type: \"number\" }, h: { type: \"number\" }, id: { type: \"string\" } },\n required: [\"w\", \"h\"],\n },\n },\n width: { type: \"number\" },\n height: { type: \"number\" },\n padding: { type: \"number\", default: 2 },\n allowRotation: { type: \"boolean\", default: false },\n },\n required: [\"rects\", \"width\", \"height\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const rects = input.rects as Array<{ w: number; h: number; id?: string }>;\n const width = Number(input.width);\n const height = Number(input.height);\n const padding = Number(input.padding ?? 2);\n const allowRotation = Boolean(input.allowRotation ?? false);\n\n const sorted = rects.slice().sort((a, b) => b.h * b.w - a.h * a.w);\n const free: Array<{ x: number; y: number; w: number; h: number }> = [{ x: 0, y: 0, w: width, h: height }];\n const placements: Array<{ x: number; y: number; w: number; h: number; id?: string; rotated: boolean } | null> = [];\n\n for (const rect of sorted) {\n const rw = rect.w + padding, rh = rect.h + padding;\n let bestScore = Infinity, bestFi = -1, bestRot = false;\n for (let fi = 0; fi < free.length; fi++) {\n const f = free[fi]!;\n if (f.w >= rw && f.h >= rh) {\n const score = Math.min(f.w - rw, f.h - rh);\n if (score < bestScore) { bestScore = score; bestFi = fi; bestRot = false; }\n }\n if (allowRotation && f.w >= rh && f.h >= rw) {\n const score = Math.min(f.w - rh, f.h - rw);\n if (score < bestScore) { bestScore = score; bestFi = fi; bestRot = true; }\n }\n }\n if (bestFi >= 0) {\n const f = free[bestFi]!;\n const pw = bestRot ? rh : rw, ph = bestRot ? rw : rh;\n placements.push({ x: f.x, y: f.y, w: rect.w, h: rect.h, id: rect.id, rotated: bestRot });\n free.splice(bestFi, 1);\n if (f.w - pw > 0 && ph > 0) free.push({ x: f.x + pw, y: f.y, w: f.w - pw, h: ph });\n if (f.w > 0 && f.h - ph > 0) free.push({ x: f.x, y: f.y + ph, w: f.w, h: f.h - ph });\n } else {\n placements.push(null);\n }\n }\n\n const result = new Array<typeof placements[0]>(rects.length).fill(null);\n for (let i = 0; i < sorted.length; i++) {\n result[rects.indexOf(sorted[i]!)] = placements[i]!;\n }\n\n const packed = result.filter(Boolean).length;\n const utilization = result.filter(Boolean).reduce((acc, p) => {\n const pl = p as { w: number; h: number };\n return acc + pl.w * pl.h;\n }, 0) / (width * height);\n\n return textResult(JSON.stringify({ placements: result, packed, total: rects.length, utilization }));\n },\n};\n\nexport const previewDistributionTool: McpToolDefinition = {\n name: \"preview_distribution\",\n description:\n \"Generate a distribution and add a distribution:preview guide layer to visualize it non-destructively.\",\n inputSchema: {\n type: \"object\",\n properties: {\n algorithm: { type: \"string\" },\n width: { type: \"number\" },\n height: { type: \"number\" },\n params: { type: \"object\", additionalProperties: true },\n dotSize: { type: \"number\", default: 3 },\n dotColor: { type: \"string\", default: \"#0088ff\" },\n layerName: { type: \"string\" },\n seed: { type: \"number\", default: 0 },\n },\n required: [\"algorithm\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, context: McpToolContext): Promise<McpToolResult> {\n const algorithm = String(input.algorithm);\n const canvasW = Number(input.width ?? context.canvasWidth);\n const canvasH = Number(input.height ?? context.canvasHeight);\n\n // Forward to distribute_points logic by reusing the handler\n const ptResult = await distributePointsTool.handler(\n { ...input, algorithm, width: canvasW, height: canvasH },\n context,\n );\n const ptText = ptResult.content[0];\n if (!ptText || ptText.type !== \"text\" || ptResult.isError) {\n return errorResult(`Failed to generate distribution for algorithm \"${algorithm}\".`);\n }\n\n const data = JSON.parse(ptText.text) as { points: unknown[]; count: number };\n const layerId = `dist-preview-${Date.now().toString(36)}`;\n\n context.layers.add({\n id: layerId,\n type: \"distribution:preview\",\n name: (input.layerName as string) ?? `${algorithm} preview`,\n visible: true,\n locked: false,\n opacity: 1,\n blendMode: \"normal\",\n transform: { x: 0, y: 0, width: canvasW, height: canvasH, rotation: 0, scaleX: 1, scaleY: 1, anchorX: 0.5, anchorY: 0.5 },\n properties: {\n algorithm,\n params: JSON.stringify(input.params ?? {}),\n dotSize: Number(input.dotSize ?? 3),\n dotColor: String(input.dotColor ?? \"#0088ff\"),\n opacity: 0.6,\n _points: JSON.stringify(data.points),\n },\n });\n context.emitChange(\"layer-added\");\n\n return textResult(`Added distribution preview layer '${layerId}' with ${data.count} points (algorithm: ${algorithm}).`);\n },\n};\n\nexport const clearDistributionPreviewTool: McpToolDefinition = {\n name: \"clear_distribution_preview\",\n description: \"Remove distribution:preview or distribution:voronoi guide layers from the document.\",\n inputSchema: {\n type: \"object\",\n properties: {\n layerId: { type: \"string\", description: \"Specific layer ID to remove; omit to remove all distribution guide layers\" },\n },\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, context: McpToolContext): Promise<McpToolResult> {\n const layerId = input.layerId as string | undefined;\n const allLayers = context.layers.getAll();\n const toRemove = layerId\n ? allLayers.filter((l) => l.id === layerId)\n : allLayers.filter((l) => l.type.startsWith(\"distribution:\"));\n\n if (toRemove.length === 0) {\n return textResult(\"No distribution guide layers found to remove.\");\n }\n\n for (const l of toRemove) {\n context.layers.remove(l.id);\n }\n context.emitChange(\"layer-removed\");\n return textResult(`Removed ${toRemove.length} distribution guide layer(s).`);\n },\n};\n\nexport const growPatternTool: McpToolDefinition = {\n name: \"grow_pattern\",\n description:\n \"Run a growth algorithm (DLA, differential-growth, substrate) and return the resulting point set and/or paths.\",\n inputSchema: {\n type: \"object\",\n properties: {\n algorithm: {\n type: \"string\",\n enum: [\"dla\", \"differential-growth\", \"substrate\"],\n },\n width: { type: \"number\" },\n height: { type: \"number\" },\n iterations: { type: \"number\", default: 100 },\n seeds: {\n type: \"array\",\n items: { type: \"object\", properties: { x: { type: \"number\" }, y: { type: \"number\" } } },\n },\n params: { type: \"object\", additionalProperties: true },\n seed: { type: \"number\", default: 0 },\n },\n required: [\"algorithm\", \"width\", \"height\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const algorithm = String(input.algorithm);\n const width = Number(input.width);\n const height = Number(input.height);\n const iterations = Number(input.iterations ?? 100);\n const rng = makePrng(Number(input.seed ?? 0));\n\n if (algorithm === \"dla\") {\n const attached: Array<{ x: number; y: number }> = [{ x: width / 2, y: height / 2 }];\n const grid = new Uint8Array(width * height);\n grid[Math.floor(height / 2) * width + Math.floor(width / 2)] = 1;\n\n for (let w = 0; w < iterations * 10; w++) {\n let wx = Math.floor(rng() * width);\n let wy = Math.floor(rng() * height);\n for (let step = 0; step < 500; step++) {\n wx += Math.round(rng() * 2 - 1);\n wy += Math.round(rng() * 2 - 1);\n if (wx < 0 || wx >= width || wy < 0 || wy >= height) break;\n let hasN = false;\n for (let dx = -1; dx <= 1 && !hasN; dx++) {\n for (let dy = -1; dy <= 1 && !hasN; dy++) {\n const nx = wx + dx, ny = wy + dy;\n if (nx >= 0 && nx < width && ny >= 0 && ny < height && grid[ny * width + nx]) hasN = true;\n }\n }\n if (hasN) { grid[wy * width + wx] = 1; attached.push({ x: wx, y: wy }); break; }\n }\n }\n return textResult(JSON.stringify({ points: attached.map((p, i) => ({ ...p, index: i })), count: attached.length }));\n }\n\n return textResult(JSON.stringify({\n message: `Growth algorithm \"${algorithm}\" with ${iterations} iterations. Use the ${algorithm} component in sketch code for full control.`,\n algorithm,\n dimensions: { width, height },\n iterations,\n }));\n },\n};\n\nexport const tileRegionTool: McpToolDefinition = {\n name: \"tile_region\",\n description:\n \"Tile a region using Wave Function Collapse. Returns a 2D grid of tile IDs.\",\n inputSchema: {\n type: \"object\",\n properties: {\n tileSet: {\n type: \"object\",\n description: \"Tile set: {tiles: [{id, weight?}], adjacency: {[id]: {up, down, left, right}: string[]}}\",\n },\n width: { type: \"number\", description: \"Grid width in tiles\" },\n height: { type: \"number\", description: \"Grid height in tiles\" },\n seed: { type: \"number\", default: 0 },\n },\n required: [\"tileSet\", \"width\", \"height\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const tileSet = input.tileSet as {\n tiles: Array<{ id: string; weight?: number }>;\n adjacency: Record<string, Record<string, string[]>>;\n };\n const width = Number(input.width);\n const height = Number(input.height);\n const rng = makePrng(Number(input.seed ?? 0));\n\n const tiles = tileSet.tiles;\n const adj = tileSet.adjacency;\n const tileIds = tiles.map((t) => t.id);\n const weights: Record<string, number> = {};\n tiles.forEach((t) => { weights[t.id] = t.weight ?? 1; });\n\n // WFC: wave[r][c] = possible tile IDs\n const wave: string[][] = [];\n for (let r = 0; r < height; r++) {\n wave.push([]);\n for (let c = 0; c < width; c++) {\n const wRow = wave[r]!;\n wRow.push(tileIds[Math.floor(rng() * tileIds.length)] ?? tileIds[0] ?? \"\");\n }\n }\n\n // Single-pass constraint propagation\n for (let r = 0; r < height; r++) {\n for (let c = 0; c < width; c++) {\n const tid = wave[r]![c]!;\n const nbrs = [[-1, 0, \"down\"], [1, 0, \"up\"], [0, -1, \"right\"], [0, 1, \"left\"]] as const;\n for (const [dr, dc, opp] of nbrs) {\n const nr = r + dr, nc = c + dc;\n if (nr < 0 || nr >= height || nc < 0 || nc >= width) continue;\n const allowed = adj[tid]?.[opp] ?? tileIds;\n if (!allowed.includes(wave[nr]![nc]!)) {\n wave[nr]![nc] = allowed[Math.floor(rng() * allowed.length)] ?? wave[nr]![nc]!;\n }\n }\n }\n }\n\n return textResult(JSON.stringify({\n grid: wave,\n width,\n height,\n tiles: wave.flat().map((id, i) => ({ id, col: i % width, row: Math.floor(i / width) })),\n }));\n },\n};\n\nexport const distributeAlongPathTool: McpToolDefinition = {\n name: \"distribute_along_path\",\n description:\n \"Distribute points along a polyline using arc-length parameterization.\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: {\n type: \"array\",\n items: { type: \"object\", properties: { x: { type: \"number\" }, y: { type: \"number\" } } },\n description: \"Polyline points [{x, y}]\",\n },\n count: { type: \"number\", default: 20 },\n spacing: { type: \"number\", description: \"Fixed spacing in pixels (overrides count)\" },\n offset: { type: \"number\", default: 0, description: \"Start offset [0..1]\" },\n closed: { type: \"boolean\", default: false },\n },\n required: [\"path\"],\n } satisfies JsonSchema,\n\n async handler(input: Record<string, unknown>, _context: McpToolContext): Promise<McpToolResult> {\n const path = input.path as Array<{ x: number; y: number }>;\n const count = Number(input.count ?? 20);\n const spacing = input.spacing != null ? Number(input.spacing) : null;\n const offset = Number(input.offset ?? 0);\n const closed = Boolean(input.closed ?? false);\n\n if (path.length < 2) return textResult(JSON.stringify({ points: [], count: 0 }));\n\n const lens: number[] = [0];\n const pts = closed ? [...path, path[0]!] : path;\n for (let i = 1; i < pts.length; i++) {\n const dx = pts[i]!.x - pts[i - 1]!.x;\n const dy = pts[i]!.y - pts[i - 1]!.y;\n lens.push(lens[i - 1]! + Math.sqrt(dx * dx + dy * dy));\n }\n const totalLen = lens[lens.length - 1] ?? 0;\n if (totalLen === 0) return textResult(JSON.stringify({ points: [], count: 0 }));\n\n const n = spacing != null ? Math.floor((totalLen - offset * totalLen) / spacing) : count;\n const step = spacing ?? (totalLen / (closed ? n : Math.max(1, n - 1)));\n const result: Array<{ x: number; y: number; t: number; angle: number; index: number }> = [];\n\n for (let i = 0; i < n; i++) {\n const targetLen = offset * totalLen + i * step;\n if (targetLen > totalLen) break;\n\n let lo = 0, hi = lens.length - 2;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if ((lens[mid + 1] ?? 0) < targetLen) lo = mid + 1;\n else hi = mid;\n }\n const segLen = (lens[lo + 1]!) - (lens[lo]!);\n const t = segLen > 0 ? (targetLen - lens[lo]!) / segLen : 0;\n const p0 = pts[lo]!, p1 = pts[lo + 1]!;\n result.push({\n x: p0.x + t * (p1.x - p0.x),\n y: p0.y + t * (p1.y - p0.y),\n t: targetLen / totalLen,\n angle: Math.atan2(p1.y - p0.y, p1.x - p0.x),\n index: i,\n });\n }\n\n return textResult(JSON.stringify({ points: result, count: result.length, pathLength: totalLen }));\n },\n};\n\nexport const distributionMcpTools: McpToolDefinition[] = [\n distributePointsTool,\n packCirclesTool,\n packRectsTool,\n previewDistributionTool,\n clearDistributionPreviewTool,\n growPatternTool,\n tileRegionTool,\n distributeAlongPathTool,\n];\n"],"mappings":"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","names":["haltonBase"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LayerTypeDefinition, McpToolDefinition, DesignPlugin } from '@genart-dev/core';
|
|
2
|
+
|
|
3
|
+
declare const previewLayerType: LayerTypeDefinition;
|
|
4
|
+
|
|
5
|
+
declare const voronoiLayerType: LayerTypeDefinition;
|
|
6
|
+
|
|
7
|
+
declare const densityLayerType: LayerTypeDefinition;
|
|
8
|
+
|
|
9
|
+
declare const distributionMcpTools: McpToolDefinition[];
|
|
10
|
+
|
|
11
|
+
declare const distributionPlugin: DesignPlugin;
|
|
12
|
+
|
|
13
|
+
export { distributionPlugin as default, densityLayerType, distributionMcpTools, distributionPlugin, previewLayerType, voronoiLayerType };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LayerTypeDefinition, McpToolDefinition, DesignPlugin } from '@genart-dev/core';
|
|
2
|
+
|
|
3
|
+
declare const previewLayerType: LayerTypeDefinition;
|
|
4
|
+
|
|
5
|
+
declare const voronoiLayerType: LayerTypeDefinition;
|
|
6
|
+
|
|
7
|
+
declare const densityLayerType: LayerTypeDefinition;
|
|
8
|
+
|
|
9
|
+
declare const distributionMcpTools: McpToolDefinition[];
|
|
10
|
+
|
|
11
|
+
declare const distributionPlugin: DesignPlugin;
|
|
12
|
+
|
|
13
|
+
export { distributionPlugin as default, densityLayerType, distributionMcpTools, distributionPlugin, previewLayerType, voronoiLayerType };
|