{"ok":true,"site":{"host":"eludi.github.io","url":"https://eludi.github.io/precidra-viewer/","type":"live","desc":"Precidra Viewer","tools":[{"name":"get_document_info","kind":"answer","impl":"imperative","description":"Return summary metadata about the current Precidra document: filename, overall bounds, paper size, and a per-layer breakdown (object/text counts, visibility). Call this first to orient yourself before querying individual objects. Note: all coordinates, lengths, and areas returned by every tool are in the document's own world-coordinate units, which carry no fixed real-world correspondence (a drawing may be modeled with 1 unit = 1 mm, 1 m, or anything else — only paper size here is a true physical mm value). Infer the intended real-world scale from context — e.g. a door is typically 0.8-1.0 of that unit if the drawing uses meters, or 800-1000 if it uses millimeters; compare a few object sizes via get_object_info to judge which is plausible before reasoning about real-world sizes.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"list_objects_by_layer","kind":"answer","impl":"imperative","description":"List the objects on one layer as compact summaries (id, geometric type, label if any, bounding box). Use get_object_info for full detail on a specific object.","inputSchema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer name, from get_document_info"}},"required":["layer"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"get_object_info","kind":"answer","impl":"imperative","description":"Return descriptive facts about one object: geometric type, layer, label (text content or block name, if any), size/shape summary, resolved style, and nearby/contained text relationships. Does not return raw coordinates — use get_object_geometry for that.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"Object id"}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"get_object_geometry","kind":"answer","impl":"imperative","description":"Return the raw contour/vertex data of one object in the document's world coordinates (see get_document_info regarding units). An arc segment is a vertex carrying a 'through' point (the arc's midpoint). Call get_object_info first for a compact summary; use this only when actual coordinates are needed.","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"Object id"}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"measure_distance","kind":"answer","impl":"imperative","description":"Compute the minimum distance in world units between two references. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns — useful for \"what if\" probes against geometry that does not exist in the drawing.","inputSchema":{"type":"object","properties":{"from":{"type":"object","description":"EntityRef: { id } or { x, y } or { closed, contours }"},"to":{"type":"object","description":"EntityRef: { id } or { x, y } or { closed, contours }"}},"required":["from","to"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"check_intersection","kind":"answer","impl":"imperative","description":"Test whether two references' geometries intersect, and return the intersection point(s) if so. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. Read-only — does not modify anything, unlike the interactive boolean operations.","inputSchema":{"type":"object","properties":{"a":{"type":"object","description":"EntityRef: { id } or { x, y } or { closed, contours }"},"b":{"type":"object","description":"EntityRef: { id } or { x, y } or { closed, contours }"}},"required":["a","b"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"},{"name":"find_related_entities","kind":"answer","impl":"imperative","description":"Find objects — optionally filtered by layer or geometric type — that have a specific spatial relationship to a reference. The reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. relation uses the standard OGC/DE-9IM spatial-predicate terms (as in PostGIS/Shapely) and is one or more of: \"contains\" (reference fully encloses the match), \"within\" (reference lies fully inside the match), \"overlapping\" (the two share genuine area — covers both OGC \"Overlaps\" and \"Crosses\", since which one applies depends on incidental drawing choices like whether a door is a closed rectangle or an open line), \"touches\" (touch, or nearly touch within adjacentTolerance, without truly overlapping — e.g. two rooms sharing a wall, or a door opening spanning a wall), \"close\" (within closeDistance but not touching — conceptually like PostGIS ST_DWithin, not a named DE-9IM predicate), \"disjoint\" (none of the above). Never returns the reference object itself. adjacentTolerance may be omitted — it then defaults to a small multiple of the document's own modeling tolerance, tight enough to only catch geometry that was actually snapped together. closeDistance is more open-ended: since the document's world-coordinate unit has no fixed real-world correspondence (see get_document_info), it should usually be supplied explicitly, scaled to match this document's own units — inspect a few object sizes via get_object_info first to judge that scale — though it falls back to a multiple of the document's primary grid spacing when available. Each match includes layer and area (for a closed match) alongside id/type/label, so a follow-up get_object_info call is often unnecessary. A \"touches\" match additionally includes contact: { type: \"point\"|\"edge\", length?, points }, describing the actual contact geometry — this matters because a single shared corner point (type \"point\") is a much weaker signal than a real shared wall run (type \"edge\", with its length) when deciding whether two spaces are meaningfully connected.","inputSchema":{"type":"object","properties":{"entity":{"type":"object","description":"EntityRef: { id } or { x, y } or { closed, contours }"},"relation":{"type":"array","items":{"type":"string","enum":["disjoint","close","touches","overlapping","contains","within"]},"minItems":1,"description":"One or more of: disjoint, close, touches, overlapping, contains, within"},"layer":{"type":"string","description":"Restrict matches to this layer"},"type":{"type":"string","description":"Restrict matches to this geometric type (see get_object_info)"},"closeDistance":{"type":"number","description":"Required if relation includes \"close\" and no grid is available to default from"},"adjacentTolerance":{"type":"number","description":"Optional if relation includes \"touches\" — defaults to a small multiple of the modeling tolerance"}},"required":["entity","relation"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/precidra-viewer/"}],"category":"Developer Tools","favicon":"/favicons/eludi.github.io.svg","apiSurface":"spec","toolCount":7}}