Sélection avancée & tags smart
En une phrase : Auguste sélectionne tout ce qui matche un filtre + tague toutes les pièces / portes / fenêtres d'une vue d'un coup. Difficulté :
facile Temps gagné : ~10-30 min par vue (vs taggage manuel ligne par ligne)
Les 8 tools de la vague 1
Sélection avancée (5 tools)
| Tool | Ce que ça fait | Validé |
|---|---|---|
revit_select_by_filter | Sélectionne par catégorie + filtre param/op/valeur | |
revit_select_similar | Tous les éléments du même Type que le seed | |
revit_save_selection_set | Crée un SelectionFilterElement Revit native | |
revit_list_selection_sets | Liste tous les sets sauvegardés | |
revit_load_selection_set | Restaure une sélection sauvegardée |
Tags smart par catégorie (3 tools)
| Tool | Ce que ça fait | Validé |
|---|---|---|
revit_place_room_tags_smart | Tague toutes les pièces de la vue (anti-doublon) | À tester sur vue plan |
revit_place_door_tags_smart | Tague toutes les portes (anti-doublon) | |
revit_place_window_tags_smart | Tague toutes les fenêtres (anti-doublon) | À tester |
Exemples d'usage
Sélection par filtre param/op/valeur
« Sélectionne toutes les portes du niveau L1 »
POST /tool-call
{
"tool": "revit_select_by_filter",
"params": {
"category": "OST_Doors", // BuiltInCategory (ou nom EN/FR, ou "all")
"parameter": "Niveau", // nom du paramètre (FR/EN, champs racine virtuels OK)
"operator": "contains", // eq | neq | contains | starts_with | ends_with | gt | lt
"value": "L1"
}
}Pas besoin de paramètre si on veut tous les éléments de la catégorie :
{ "tool": "revit_select_by_filter", "params": { "category": "OST_Windows" } }
// → 169 fenêtresOpérateurs disponibles :
eq/neq— égalité stricte (case-insensitive)contains/starts_with/ends_with— sous-chaînegt/lt— numérique d'abord, alphabétique en fallback
Champs racine virtuels (pas des Parameters Revit, traités spécialement) :
Type Name/Type— nom du type d'élémentFamille/Family— nom de familleCatégorie/Category— nom de catégorieNiveau/Level— nom de niveau
Sélection des éléments similaires
« Sélectionne tous les éléments du même type que cette fenêtre »
{ "tool": "revit_select_similar", "params": { "seed_element_id": "824575" } }
// → { count: 32, type_name: "50\" x 60\"", element_ids: [...] }Sauvegarder / restaurer une sélection
// Sauvegarder
{ "tool": "revit_save_selection_set",
"params": { "name": "Fenetres etage 1", "element_ids": ["123","456",...] } }
// Lister
{ "tool": "revit_list_selection_sets" }
// → [{ id: "2579492", name: "Fenetres etage 1", count: 32 }, ...]
// Restaurer (par nom ou par id)
{ "tool": "revit_load_selection_set", "params": { "name": "Fenetres etage 1" } } Caractères interdits dans le nom :
: ; { } [ ] | < > ? ` ~ — (em dash). Revit rejette le name avec une exception explicite.
Taguer tout d'un coup
« Tague toutes les portes de cette vue »
{ "tool": "revit_place_door_tags_smart" }
// → { placed: 1, skipped: 33, candidates: 34 }L'outil skip les éléments déjà tagués dans la vue active — on peut le rappeler plusieurs fois sans créer de doublons.
Détails techniques
Champs racine vs Parameters Revit
LookupParameter("Type Name") retourne null car « Type Name » n'est pas un Parameter Revit régulier — c'est une propriété de l'ElementType. Le helper ReadParamForFilter gère ces 4 champs racine virtuels en lisant directement ElementType.Name, ElementType.FamilyName, Element.Category.Name, Level.Name.
Sans ce helper, un filtre Type Name eq "F1 - 70x114" retournerait toujours 0 résultat. Détails dans handoff/lessons/feedback_revit_lookup_virtual_fields.md.
SelectionFilterElement Revit native
Les selection sets sont des éléments Revit standards — visibles dans la fenêtre Manage > Selection > Edit. Auguste utilise l'API native, donc les sets créés sont compatibles avec l'utilisation manuelle Revit (et vice-versa).
Anti-doublon des tags
Pour chaque tag de la vue active, on récupère IndependentTag.GetTaggedLocalElementIds() (ou RoomTag.Room.Id) — l'ensemble des éléments déjà tagués. On skip ceux-là à l'ajout.
Limitations
Performance sur gros doc :
select_by_filtersanscategoryou aveccategory="all"itère tous les éléments du doc, peut prendre 30 s sur 50 000 elements. Toujours filtrer par catégorie quand possible.Tags 3D : les tags sont créés 2D (annotation horizontale) — pas adapté pour les vues 3D pures. Utiliser uniquement sur les vues plan/coupe/élévation.
Position centroïde : le tag est placé au centroïde de la bbox de l'élément dans la vue. Pas de logique anti-collision avancée pour l'instant.
Public cible : utilisateurs et utilisatrices, agents IA (Claude) Dernière vérification : 2026-05-16 (Snowdon Towers, vague 1 validée à 02:56)