Skip to content

Catalogues familles — navigation, recherche, duplication paramétrée

En une phrase : Auguste vous fait gagner du temps sur la gestion des familles Revit — navigation par catégorie, recherche par filtre, duplication avec override des dimensions. Difficulté : facile Temps gagné : ~20 min par projet (vs Project Browser + edit type manuel)

Les 3 tools de la vague 4

ToolCe que ça fait
revit_browse_91studio_catalogListe toutes les familles chargées, groupées par catégorie
revit_search_familyRecherche par catégorie + nom partiel + filtre paramètre
revit_duplicate_family_typeDuplique un FamilySymbol + override des paramètres

Exemples d'usage

« Liste-moi toutes les familles chargées dans le projet »

bash
POST /tool-call
{ "tool": "revit_browse_91studio_catalog", "params": { "max_per_category": 50 } }

Retour :

json
{
  "categories_count": 28,
  "total_types": 412,
  "categories": [
    {
      "category": "Doors",
      "count": 18,
      "types": [
        { "type_id": "12345", "family_name": "Single-Flush", "type_name": "750 x 2100", "is_active": true },
        ...
      ]
    },
    {
      "category": "Windows",
      "count": 24,
      "types": [...]
    },
    ...
  ]
}

Recherche ciblée

« Trouve-moi toutes les fenêtres qui font 1200mm de large »

bash
{
  "tool": "revit_search_family",
  "params": {
    "category": "OST_Windows",
    "parameter": "Width",
    "operator": "eq",
    "value": "1200"
  }
}

« Toutes les portes contenant "vitrée" dans leur nom »

bash
{
  "tool": "revit_search_family",
  "params": {
    "category": "OST_Doors",
    "name_contains": "vitrée"
  }
}

Retour : liste des FamilySymbols correspondants avec type_id, family_name, type_name, category, is_active. Limité à 200 résultats (avec flag truncated: true si plus).

Dupliquer un type avec dimensions custom

« Duplique la fenêtre F1-70x114 en F1-90x140 (90×140 cm) »

bash
{
  "tool": "revit_duplicate_family_type",
  "params": {
    "seed_type_id": "456789",
    "new_type_name": "F1 - 90x140",
    "params": {
      "Width": 900,             // en mm
      "Height": 1400,           // en mm
      "Sill Height": 1100       // hauteur d'allège en mm
    }
  }
}

Retour :

json
{
  "new_type_id": "456790",
  "new_type_name": "F1 - 90x140",
  "family_name": "F1 Fenêtre",
  "category": "Windows",
  "applied_params": [
    { "name": "Width", "set": true },
    { "name": "Height", "set": true },
    { "name": "Sill Height", "set": true }
  ],
  "skipped_params": []
}

Convention agence : tous les paramètres StorageType.Double (dimensions) sont passés en millimètres dans params. Auguste convertit en pieds Revit (÷ 304.8) automatiquement.

Si un paramètre est introuvable ou read-only, il apparaît dans skipped_params avec la raison. Le tool n'échoue jamais sur un param invalide — il liste juste ce qui n'a pas été appliqué.

Détails techniques

browse_91studio_catalog

  • Source : FilteredElementCollector + OfClass(FamilySymbol)
  • Groupement : GroupBy(fs.Category.Name) puis tri alpha
  • Limite par catégorie : max_per_category (default 100) pour éviter une response gigantesque dans les projets > 5000 types
  • Champ is_active : un FamilySymbol doit être Activate() avant de pouvoir être instancié — utile pour Claude qui veut savoir si un appel place_family_instance doit d'abord activer

search_family

  • Filtres composables (tous AND) : category + name_contains + parameter+operator+value
  • Catégories acceptées :
    • OST_* enum BuiltInCategory (cf. doc Revit API)
    • Nom EN ou FR de la catégorie ("Windows" / "Fenêtres")
  • Opérateurs paramètre : eq/neq/contains/starts_with/ends_with/gt/lt — identiques à revit_select_by_filter
  • Recherche nom : name_contains cherche dans FamilyName ET TypeName (OR)
  • Limite résultats : 200 (flag truncated)

duplicate_family_type

  • API : FamilySymbol.Duplicate(newName) → renvoie un nouveau Symbol
  • Override paramètres : tente LookupParameter puis Parameter.Set(value)
  • Conversion automatique :
    • StorageType.Double → valeur passée ÷ 304.8 (mm → pieds)
    • StorageType.Integer → cast int
    • StorageType.String → cast string
  • Paramètres read-only ou introuvables : reportés dans skipped_params avec raison, jamais d'exception

Limitations connues

  • Pas de création from scratch : ce tool duplique un type existant. Pour créer une famille from scratch (geometry + parameters), il faut Document.NewFamilyDocument + Family Editor API (lourd, non exposé dans cette vague).
  • Paramètres calculés : si un param est lié à une formule (read-only), Auguste skip — utiliser parameter calculé = formule depuis l'éditeur de famille.
  • Catalogue 91STUDIO custom : à l'avenir, cette vue pourra croiser avec config/agency-rules/91studio.json pour marquer les familles "officielles agence" vs "ad-hoc".

À venir (vague 4bis)

  • revit_load_family_from_path — charger une famille depuis un .rfa local ou URL
  • revit_export_family_to_path — exporter une famille pour archivage
  • revit_create_window_family_from_scratch — création complète via Family Editor API (coût élevé)

Public cible : utilisateurs et utilisatrices, agents IA (Claude) Dernière vérification : 2026-05-16 (vague 4 livrée à 03:15)

Plugin propriétaire — équipe 91STUDIO