gradeNot graded
get_document_infoAnswer
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.
View tool JSON
{
"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
}
}list_objects_by_layerAnswer
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.
View tool JSON
{
"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
}
}get_object_infoAnswer
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.
View tool JSON
{
"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
}
}get_object_geometryAnswer
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.
View tool JSON
{
"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
}
}measure_distanceAnswer
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.
View tool JSON
{
"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
}
}check_intersectionAnswer
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.
View tool JSON
{
"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
}
}find_related_entitiesAnswer
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.
View tool JSON
{
"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
}
}