{
  "_id": "6ad30e1d90c8bbdf41a50d5f",
  "Package": "trowel",
  "Title": "A Live Constrained Delaunay Mesh",
  "Version": "0.0.0.9000",
  "Authors@R": "person(\"Michael\", \"Sumner\", email = \"mdsumner@gmail.com\", role = c(\"aut\", \"cre\"))",
  "Description": "A persistent, editable constrained Delaunay triangulation:\nadd and remove points and segments at any time, refine toward\nquality targets, and read the mesh back as plain tables\n(vertices, triangles with constraint depth, segments). Built on\nthe 'spade' Rust crate via extendr. The incremental sibling of\n'cdtr'.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "SystemRequirements": "Cargo (Rust's package manager), rustc",
  "Config/rextendr/version": "0.4.0",
  "Config/testthat/edition": "3",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.1",
  "URL": "https://github.com/hypertidy/trowel",
  "BugReports": "https://github.com/hypertidy/trowel/issues",
  "Config/pak/sysreqs": "libclang-dev",
  "Repository": "https://hypertidy.r-universe.dev",
  "Date/Publication": "2026-10-01 19:09:10 UTC",
  "RemoteUrl": "https://github.com/hypertidy/trowel",
  "RemoteRef": "HEAD",
  "RemoteSha": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
  "NeedsCompilation": "yes",
  "Packaged": {
    "Date": "2026-10-15 00:46:26 UTC",
    "User": "root"
  },
  "Author": "Michael Sumner [aut, cre]",
  "Maintainer": "Michael Sumner <mdsumner@gmail.com>",
  "_user": "hypertidy",
  "_type": "src",
  "_file": "trowel_0.0.0.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/999271c22e0219f02b7706faaa59c9c6599b1913ec0e0a10ae323f1f243e40ad",
  "_filesize": 180975,
  "_sha256": "999271c22e0219f02b7706faaa59c9c6599b1913ec0e0a10ae323f1f243e40ad",
  "_expires": "2027-01-23T00:56:37.000Z",
  "_created": "2026-10-15T00:46:26.000Z",
  "_published": "2026-10-17T05:56:45.377Z",
  "_buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 117323838113,
      "time": 98,
      "config": "linux-devel-arm64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11939008086"
    },
    {
      "job": 117323837644,
      "time": 119,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11938833834"
    },
    {
      "job": 117323837626,
      "time": 104,
      "config": "linux-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11939681060"
    },
    {
      "job": 117323837667,
      "time": 116,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11938823911"
    },
    {
      "job": 117323837691,
      "time": 110,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11938884212"
    },
    {
      "job": 117323838094,
      "time": 262,
      "config": "macos-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11939079156"
    },
    {
      "job": 117323837708,
      "time": 124,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11938928865"
    },
    {
      "job": 117323837784,
      "time": 290,
      "config": "macos-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11939906340"
    },
    {
      "job": 117323837557,
      "time": 181,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11939780166"
    },
    {
      "job": 117323852793,
      "time": 120,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "11938993182"
    },
    {
      "job": 117323837019,
      "time": 215,
      "config": "windows-devel-arm64",
      "r": "4.7.0",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 117323836906,
      "time": 113,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 117323836978,
      "time": 95,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 117323836961,
      "time": 244,
      "config": "windows-release-arm64",
      "r": "4.6.1",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 117323836769,
      "time": 76,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "FAIL",
      "artifact": ""
    }
  ],
  "_upstream": "https://github.com/hypertidy/trowel",
  "_commit": {
    "id": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
    "author": "Michael Sumner <mdsumner@gmail.com>",
    "committer": "Michael Sumner <mdsumner@gmail.com>",
    "message": "trowel: a live constrained Delaunay mesh on spade (milestones 1 and 2)\n\nextendr package over the spade crate. One handle holds a constrained\nDelaunay triangulation whose vertices carry a stable id, an origin tag\n(input / crossing / steiner) and attribute values.\n\n- mesh_new(): empty, or bulk from vertices + segment index pairs + PA.\n- mesh_add_points(): stable ids; a point at an existing vertex reuses it.\n- mesh_add_segments(): crossings with existing constraints are inserted,\n  attributes interpolated along the new segment; the crossing is spliced\n  into the older segment's chain.\n- mesh_remove_points() / mesh_remove_segments(): ids stay stable across\n  removals (handles are invalidated by spade; the id map is rebuilt lazily\n  from the vertex payload).\n- mesh_refine(): min_angle / max_area / Steiner budget; new vertices get\n  attributes by locating them in a clone of the pre-refinement mesh;\n  segment chains are re-walked along constraint edges afterwards.\n  inner_only drops Steiner vertices whose faces are all at depth 0 (spade's\n  own outer-face exclusion misreads coverages).\n- Extractors: mesh_vertices(), mesh_triangles() with depth (0/1 BFS over\n  face adjacency, +1 per constraint crossed), mesh_segments() chains,\n  mesh_constraint_edges(), mesh_edges(), mesh_counts(), mesh_T().\n- print and plot methods; README with figure; inst/DESIGN.md (the Track 2\n  precis plus findings); inst/benchmarks/bench.R vs cdtr and RTriangle.\n- 49 tests: round trip, incremental equals batch, add/remove no-op with\n  stable ids, segment removal, crossing interpolation and chain splicing,\n  refinement bounds and chain repair, re-refine after an edit, min_angle,\n  coverage refinement, depth parity with cdtr on nc.\n\nCo-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01M6Y3xY4ZZCaDaMnqYTyBKW\n",
    "time": 1790881750
  },
  "_maintainer": {
    "name": "Michael Sumner",
    "email": "mdsumner@gmail.com",
    "login": "mdsumner",
    "mastodon": "@mdsumner@rstats.me",
    "bluesky": "@mdsumner.bsky.social",
    "description": "no names have an anonymous function",
    "uuid": 4107631
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "cdtr",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    }
  ],
  "_owner": "hypertidy",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-40",
      "n": 1
    }
  ],
  "_tags": [],
  "_stars": 1,
  "_contributors": [
    {
      "user": "mdsumner",
      "count": 1,
      "uuid": 4107631
    }
  ],
  "_userbio": {
    "uuid": 29297592,
    "type": "organization",
    "name": "hypertidy",
    "followers": 27,
    "description": "[ ... ]"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/trowel"
  },
  "_devurl": "https://github.com/hypertidy/trowel",
  "_searchresults": 5,
  "_cargo": true,
  "_topics": [
    "rust",
    "cargo"
  ],
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/readme.html",
    "extra/readme.md",
    "extra/trowel.html",
    "LICENSE"
  ],
  "_cranurl": false,
  "_exports": [
    "mesh_add_points",
    "mesh_add_segments",
    "mesh_constraint_edges",
    "mesh_counts",
    "mesh_edges",
    "mesh_new",
    "mesh_refine",
    "mesh_remove_points",
    "mesh_remove_segments",
    "mesh_segments",
    "mesh_T",
    "mesh_triangles",
    "mesh_vertices"
  ],
  "_help": [
    {
      "page": "mesh_edit",
      "title": "Edit a live mesh",
      "topics": [
        "mesh_add_points",
        "mesh_add_segments",
        "mesh_edit",
        "mesh_remove_points",
        "mesh_remove_segments"
      ]
    },
    {
      "page": "mesh_new",
      "title": "Create a live mesh",
      "topics": [
        "mesh_new"
      ]
    },
    {
      "page": "mesh_read",
      "title": "Read a live mesh as tables",
      "topics": [
        "mesh_constraint_edges",
        "mesh_counts",
        "mesh_edges",
        "mesh_read",
        "mesh_segments",
        "mesh_triangles",
        "mesh_vertices"
      ]
    },
    {
      "page": "mesh_refine",
      "title": "Refine a live mesh",
      "topics": [
        "mesh_refine"
      ]
    },
    {
      "page": "mesh_T",
      "title": "Triangle vertex index matrix",
      "topics": [
        "mesh_T"
      ]
    },
    {
      "page": "Trowel",
      "title": "The live mesh.",
      "topics": [
        "Trowel"
      ]
    }
  ],
  "_readme": "https://github.com/hypertidy/trowel/raw/HEAD/README.md",
  "_rundeps": [],
  "_score": 1.6989700043360187,
  "_indexed": true,
  "_nocasepkg": "trowel",
  "_universes": [
    "hypertidy",
    "mdsumner"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:48:17.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/6c496ef9a3a1a502e99c5de718c2705557277ca8e60951bf161736ac85aa2c80",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:48:37.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/04e35b031d61a26ab64d597be19fc425ac5ae0ea4acd1a6fb14a31c2ce9bd8b9",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:48:23.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/30ce70bd18d3f754fc562e1f08b5133e0834b4b8b053630748536f82e6ad322d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:48:30.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/de5a252c6a7c54b42e87670ffadc84f0ad19e49e0836237ae7722d962e9b84e9",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:51:29.000Z",
      "arch": "aarch64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/34cffca860e5e14ac3d4b0def54152f1565f090ede0a1b653461851016b86a26",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:54:45.000Z",
      "arch": "x86_64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/25791dad6f2c8fcefa25f5aec248430e07e8a0b2a39885c2cedb7be13e7e2603",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:51:49.000Z",
      "arch": "aarch64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/8f92f1472fa1effcb6d451754fb4940a4fcb9ad67b2e1e4d57b8b07b35cde15a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:53:36.000Z",
      "arch": "x86_64",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/c2ef2e1d0c9adaa9890d3187f0740fa69d261178dbf773a86871d9a9fe74d1d4",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.0.0.9000",
      "date": "2026-10-15T00:48:40.000Z",
      "arch": "emscripten",
      "commit": "32e0fe8329de42c5bf61656a114bd9040d6b49e7",
      "fileid": "https://r2.ropensci.org/9fe91e2292a5cc4ae41c75b34d180dbfa5877d0e6c03caab0f911726ecc479dc",
      "status": "success",
      "buildurl": "https://github.com/r-universe/hypertidy/actions/runs/38661656170"
    }
  ]
}