Typed polygon modeling and mesh editing tools for Blender. The lightweight
mesh-edit group remains active by default. The larger modeling group is
inactive until requested and covers the shared DCC verbs for primitive,
loft/lathe, hard-surface edits, modifiers, pivots, hierarchy, cleanup, UVs, and
material assignment. Mutating modeling tools read Blender state back before
reporting success.
Prefer blender-objects for object transforms and selection, blender-mesh for
modifier management, blender-uv-ops for UVs, and blender-scripting only
after checking this typed surface.
Solid pointed arches
create_pointed_arch creates a closed, all-quad U-shaped solid for deep door
and window surrounds. Load the modeling group first. width is the clear
opening, spring_height is the jamb height, rise is the pointed head rise,
frame_width is horizontal jamb / vertical crown thickness, and depth is
physical reveal depth. Curved head thickness is not a constant normal offset.
The opening bottom center is the origin; X spans width, Z height, and the
solid occupies Y=0 through Y=depth. Use object transforms to orient it on a
side wall. The tool leaves selection and active object unchanged, rejects
existing names, and does not cut the wall behind the opening, create glass,
assign material, bevel, or unwrap UVs. Follow with the corresponding typed
tools. Recess the glazing and cut the wall separately so the depth remains
visible; a coplanar opaque wall can hide the entire reveal.
Component discovery
Use inspect_mesh_components before choosing vertex, edge, or face indices.
It reads the original mesh in Object mode without changing selection or mode.
Coordinates, centroids, and normal filters are object-local, not evaluated or
world-space. The optional bounds filter tests each component's centroid.
Pages contain at most 256 records. Pass next_offset and the returned
revision as expected_revision for subsequent pages, with unchanged filters.
The token covers mesh identity, coordinates, normals and connectivity; changes
to these reject stale paging. It is process-local, not a durable ID or an
evaluated/world-space geometry revision. Discard indices after edits or reloads.
For extrude_faces, bevel_edges, inset, and add_edge_loop, pass the same
token as expected_revision. The tool checks it on the host main thread
before changing mode, selection, or geometry. Stale, malformed, unreadable,
oversized, and non-Object-mode meshes fail without an edit. Query again and
choose fresh indices; never retry the old indices with the guard removed.
Omitting the optional token preserves legacy unguarded behavior. Other
mutation tools do not yet accept this guard.
Use the sequence inspect_mesh_components -> guarded edit -> inspect_mesh_components.
Read the edit's topology evidence before querying the resulting mesh. The
guard prevents a stale target; it is not rollback or cancellation once the
native operator starts. UVs, materials, selection, transforms, and modifiers
are outside this original-mesh revision contract.
The scan rejects meshes above 100,000 total vertices/edges/faces/loops.
Connectivity lists are capped at 64 entries per relation, with full counts and
connectivity_complete=false when truncated. A rejected scan never returns
a partial revision. For example, query faces with normal_direction=[0,0,1]
and normal_min_dot=0.9 to find locally upward-facing faces.