Coupes / Phasage / Analyses
En une phrase : 5 tools pour automatiser les opérations transversales — séries de coupes, gestion des phases (rénovation), analyses de surfaces. Difficulté :
moyenne Vagues regroupées (5, 6 et 7) car peu de tools chacune.
Tools livrés
Vague 5 — Coupes
| Tool | Ce que ça fait | Statut |
|---|---|---|
revit_create_sections_along_grid | Crée N coupes parallèles régulièrement espacées | |
revit_create_interior_elevations_by_room | Élévations intérieures auto par pièce | |
revit_create_callout_detail | Callout zoom (vue de détail) sur zone |
Vague 6 — Phasage
| Tool | Ce que ça fait | Statut |
|---|---|---|
revit_set_element_phase | Change la Phase Created d'un élément | |
revit_mark_for_demolition | Marque une liste d'éléments à démolir | |
revit_create_phase_filter | Crée un PhaseFilter custom |
Vague 7 — Analyses
| Tool | Ce que ça fait | Statut |
|---|---|---|
revit_compute_gross_floor_area | Surface utile brute par étage (somme Rooms) | |
revit_compute_envelope_surface | Surface façades + toits | |
revit_check_pmr_compliance | Vérification PMR (slope ramp, door clear width…) |
Exemples d'usage
Série de coupes le long d'un axe
« Crée 6 coupes parallèles le long de la rue principale (axe X), une tous les 5m »
POST /tool-call
{
"tool": "revit_create_sections_along_grid",
"params": {
"axis_start_x_mm": 0,
"axis_start_y_mm": 10000,
"axis_end_x_mm": 30000,
"axis_end_y_mm": 10000,
"step_mm": 5000,
"section_width_mm": 20000,
"top_z_mm": 30000,
"bottom_z_mm": -2000,
"far_clip_mm": 5000,
"name_prefix": "AA"
}
}Retour : 7 coupes créées (0m, 5m, 10m, 15m, 20m, 25m, 30m), nommées AA 01 → AA 07.
Marquer pour démolition
« Marque ces 12 murs comme démolis (rénovation lot existant) »
{
"tool": "revit_mark_for_demolition",
"params": {
"element_ids": ["123", "456", "789", ...],
"demo_phase_name": "Démolition" // par défaut : dernière phase du projet
}
}Changer la phase d'un élément
{
"tool": "revit_set_element_phase",
"params": {
"element_id": "123",
"phase_name": "Existant"
}
}Si la phase n'existe pas, le tool retourne la liste des phases disponibles.
Surface utile par étage
« Donne-moi la surface utile par étage »
{ "tool": "revit_compute_gross_floor_area", "params": {} }Retour :
{
"total_rooms": 184,
"levels_count": 4,
"total_gross_area_m2": 1234.56,
"by_level": [
{ "level_name": "L1", "rooms_count": 52, "area_m2": 387.45 },
{ "level_name": "L2", "rooms_count": 48, "area_m2": 365.12 },
...
]
}Surface enveloppe (façades + toits)
« Quelle est la surface d'enveloppe du bâtiment ? »
{ "tool": "revit_compute_envelope_surface", "params": {} }Retour :
{
"walls_exterior_count": 24,
"walls_total_count": 1116,
"walls_area_m2": 856.34,
"roofs_count": 5,
"roofs_area_m2": 412.78,
"envelope_total_m2": 1269.12
}Détails techniques
create_sections_along_grid
- Vecteur axe
axisVec = end - start, perpendiculaireperpDir = axisVec × Z - Boucle
distance ∈ [0, axisLen]stepstep_mm→ centre de chaque section - Transform orthonormal :
BasisX = perpDir(largeur),BasisY = Z(hauteur),BasisZ = axisDir(regard) - Nommage automatique
{name_prefix} {idx:00}(résistant aux conflits Revit)
set_element_phase / mark_for_demolition
- API :
element.get_Parameter(BuiltInParameter.PHASE_CREATED).Set(phaseId)(ouPHASE_DEMOLISHED) - Skip silencieux si le paramètre est read-only (certaines familles annotation, levels)
- Si pas de phase trouvée par nom, retourne
available_phases[]pour aider
compute_gross_floor_area
- Source :
FilteredElementCollector + OST_RoomspuisWhereElementIsNotElementType - Filtre : skip les rooms
area == 0(non placées) - Groupement par
Room.LevelId, conversion pieds² → m² (× 0.09290304)
compute_envelope_surface
- Murs :
Wall.WallType.Function == WallFunction.Exterior(skip cloisons intérieures) - Toits : tous les
RoofBase(pas de filtre orientation — un toit-terrasse est inclus) - Surface lue via
BuiltInParameter.HOST_AREA_COMPUTED
Limitations connues
create_sections_along_grid: génère bien les vues mais ne crée PAS l'annotation "section line" visible dans la vue parent — Revit le fait normalement automatiquementcompute_envelope_surface: pas de filtre orientation des toits (un toit-terrasse plat est compté comme façade enveloppe). Pour distinguer toiture inclinée vs plate, filtre custom à ajouterPhases : nécessite que les phases (
Existant,Projet,Démolition…) soient préalablement créées via Manage > Phasinggross_floor_area= somme brute des rooms placées. Pour distinguer SHON vs SHOB vs surface utile selon RT, filtres custom par paramètreDepartmentou code occupation à ajouter
Reportés (vagues 5bis, 6bis, 7bis)
create_interior_elevations_by_room: détecter l'orientation des 4 murs principaux de chaque pièce, créer 4 élévations intérieures (N/S/E/O) avec bounding box cadré sur la pièce. Complexité API : moyenne-haute.create_callout_detail: créer uneViewSectionde typeDetailzoomée sur une zone du parent. API existe (ViewSection.CreateCallout) — à valider sur les types de vue cibles.create_phase_filter:PhaseFilter.Create(doc, name)+ définir l'affichage par phase (New/Existing/Demolished/Temporary × visibilité). API peu documentée, à creuser.check_pmr_compliance: règles métier ERP. Cas typiques à check :- largeur passage portes ≥ 90 cm
- pente rampes ≤ 5 %
- palier ≥ 1,20 × 1,20 m devant chaque porte
- largeur couloirs ≥ 1,40 m
- revenir avec template/règles 91STUDIO pour scope précis
Public cible : utilisateurs et utilisatrices, agents IA (Claude) Dernière vérification : 2026-05-16 (vagues 5-7 livrées à 03:25, 5 tools propres + 4 reportés documentés)