Description

Paramétrer les attributs de section pour les objets VisualArq et Rhino à partir de leur calque.

Le script suivant fonctionne sur :

  • Rhino pour Windows ;
  • Il requiert l’installation du plugin VisualArq.

Objectif

Ce script automatise le processus de paramétrage des attributs de section aux objets et aux définitions d’instance dans un modèle Rhino et VisualArq, sur la base des configurations spécifiées dans un fichier .csv. Il permet de sélectionner une échelle et d’appliquer des motifs de section, des couleurs et d’autres attributs aux objets par nom de calque.

Prérequis

  • Un fichier .csv (section_properties.csv) contenant les détails de configuration nécessaires pour les échelles, les matériaux et les attributs (un exemple est disponible ci-dessous).
  • Rhino 7 et VisualArq 2 (testé rapidement sur Rhino 8 et VisualArq 3, aucun bug majeur n’a été identifié).

Processus

  1. Chargement de la configuration

    • Le script lit le fichier .csv pour récupérer les configurations des motifs de section, des couleurs et d’autres attributs.
    • Les échelles et les configurations des matériaux associés sont stockées dans un dictionnaire en vue d’une utilisation ultérieure.
  2. Sélection de l’échelle par l’utilisateur·ice

    • Le script dresse une liste dynamique de toutes les échelles trouvées dans le fichier .csv.
    • L’utilisateur·ice sélectionne une échelle via une boîte de dialogue dans Rhino.
  3. Génération d’un dictionnaire de motifs de hachures

    • Le script génère un dictionnaire qui associe les noms des motifs de hachures à leurs indices pour une recherche rapide.
  4. Paramétrage des attributs de section

    • Pour chaque matériau dans l’échelle sélectionnée :
      • Les objets et les définitions d’instance correspondant au nom du matériau dans leur nom de calque sont identifiés.
      • Les motifs de section, les couleurs, les épaisseurs de ligne sont appliqués à ces objets.
  5. Enregistrement de l’échelle dans le document user text

    • L’échelle sélectionnée est enregistrée dans le document user text (elle est utilisée dans le script Print2 pour informer l’utilisateur·ice de l’échelle de section appliquée avant l’impression).

Format du fichier .csv

Le fichier .csv doit comporter les colonnes suivantes·:

  • Scale : La catégorie d’échelle (par exemple, 1:50).
  • Material : Le nom du matériau.
  • Pattern Name : Le nom du hatch de section à appliquer.
  • Pattern Scale : L’échelle du hatch.
  • Pattern Angle : L’angle de rotation du hatch (en radians ou sous forme d’expressions pi).
  • Epaisseur de la ligne : L’épaisseur de la ligne à appliquer à la section.
  • Color Source : Spécifie la source de la couleur du hatch (object, parent, layer, ou display).
  • Color : Les valeurs de couleur RVB (par exemple, [255, 0, 0]).

Attention

Le script lit le fichier .csv ligne après ligne, et essaie de faire correspondre le nom du calque de l’objet avec la string de la colonne Material. Cela signifie que si vous avez deux entrées comme NaturalStone et Stone dans le CSV, pour lesquelles vous souhaitez appliquer des attributs de section différents, vous devez placer l’entrée Stone avant l’entrée NaturalStone.

La meilleure pratique consiste à toujours placer les noms de matériaux plus génériques (comme Stone) avant les noms plus spécifiques (comme NaturalStone) dans le fichier CSV. Cela permet de s’assurer que les matériaux spécifiques sont remplacés après que les matériaux génériques ont été appliqués.

Pour plus d’informations sur le mot-clé in, utilisé pour comparer les noms de couches et les noms de matériaux : voir la documentation du mot-clé in.

Comment exécuter le script

  1. Placez le script dans un fichier Python, stocké à l’endroit qui vous convient le mieux.
  2. Assurez-vous que section_properties.csv est dans le même répertoire ou spécifiez son chemin dans la fonction set_print_info.
  3. Exécutez le script dans Rhino via la commande RunPythonScript, ou un alias dédié.

Notes

  • Le script intègre une gestion des erreurs pour les angles, les sources de couleur et les valeurs de couleur invalides.
  • Le script applique les attributs de section pour les objets dans les blocs imbriqués dans d’autres blocs.
  • Les objets avec des conventions de nommage spécifiques (par exemple, *Plan view, *Section view) sont exclus du traitement pour une exécution plus rapide.
  • Des valeurs par défaut sont fournies pour les attributs de couleur et de motif en cas d’erreurs d’analyse.

Limites

  • Le script suppose que les conventions de nommage des couches sont cohérentes et incluent les noms des matériaux (voir la logique décrite dans Hiérarchie de modélisation).
  • Seuls les objets et les définitions d’instances sont traités.

Voir aussi le script Print2 et la logique de Hiérarchie de modélisation.

Script par MLAV.LAND, sous licence GNU GPL 3.

Code

import rhinoscriptsyntax as rs
import scriptcontext as sc
import math
import clr
import csv
 
clr.AddReference("VisualARQ.Script")
import VisualARQ.Script as va
 
pi = math.pi  # init pi value
 
# Define the section pattern color source dictionary
section_pattern_color_source = {
    "object": 0,
    "parent": 1,
    "layer": 2,
    "display": 3
}
 
# Function to interpret pattern angles (e.g., pi/4 -> radians)
def parse_pattern_angle(angle_str):
    try:
        if "pi" in angle_str:
            return eval(angle_str.replace("pi", str(pi)))
        return float(angle_str)
    except Exception as e:
        print("Error parsing pattern angle '{}': {}".format(angle_str, e))
        return 0.0
 
# Function to parse the color source from the CSV
def parse_color_source(color_source_str):
    try:
        return section_pattern_color_source[color_source_str]
    except Exception as e:
        print("Error parsing color source '{}': {}".format(color_source_str, e))
        return 3
 
# Function to parse color value
def parse_color_value(color_str):
    try:
        # Remove any extra quotes around the color string
        color_str = color_str.strip('"')
        return eval(color_str)  # Convert the string representation of the list into an actual list
    except Exception as e:
        print("Error parsing color value '{}': {}".format(color_str, e))
        return [255, 255, 255]  # Default to white on failure
 
def read_scale_configs(csv_file):
    scale_configs = {}
    with open(csv_file, 'r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            scale = row['Scale']
            if scale not in scale_configs:
                scale_configs[scale] = []
            scale_configs[scale].append({
                'Scale': row['Scale'],
                'Material': row['Material'],
                'Pattern Name': row['Pattern Name'],
                'Pattern Scale': float(row['Pattern Scale']),
                'Pattern Angle': parse_pattern_angle(row['Pattern Angle']),
                'Line Weight': float(row['Line Weight']),
                'Color Source': parse_color_source(row['Color Source']),
                'Color': parse_color_value(row['Color'])
            })
    return scale_configs
 
# Function to gather all unique scale values from the CSV
def get_scales_from_csv(csv_file):
    scales = set()  # Use a set to avoid duplicates
    with open(csv_file, 'r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            scales.add(row['Scale'])  # Add each scale value to the set
    return sorted(scales)  # Return sorted scales for consistent display
 
# Function to apply section attributes based on the scale and material
def apply_section_attributes_by_layer_name(material_name, pattern_name, pattern_scale, pattern_angle, line_weight, section_pattern_color_source, color, hatch_dict):
    rs.EnableRedraw(False)
    selected_objs = []
    all_objs = rs.AllObjects()
    if all_objs:
        for obj in all_objs:
            obj_layer = rs.ObjectLayer(obj)
            if material_name in obj_layer:
                selected_objs.append(obj)
 
    if selected_objs:
        for obj in selected_objs:
            pattern_index = hatch_dict.get(pattern_name, -1)  # Default to -1 if pattern not found
            va.SetObjectSectionPattern(obj, pattern_index, pattern_angle, pattern_scale)
            va.SetObjectSectionPlotWeight(obj, line_weight)
 
            # Handle Section Pattern Color Source
            try:
                if rs.ObjectPrintColorSource(obj) != 1:
                    va.SetObjectSectionPatternColorSource(
                        obj, va.SectionPatternColorSource(section_pattern_color_source)
                    )
                else:
                    va.SetObjectSectionPatternColorSource(obj, va.SectionPatternColorSource(3))
            except Exception as e:
                print("Error setting SectionPatternColorSource for object: {}".format(e))
 
            # Handle color assignment
            if section_pattern_color_source != 3 and rs.ObjectPrintColorSource(obj) != 1:
                section_color = rs.CreateColor(color)
                va.SetObjectSectionPatternColor(obj, section_color)
 
    # Process instance definitions
    idefs = sc.doc.InstanceDefinitions
    for idef in idefs:
        if idef.Name:
            if (
                "*Plan view" not in idef.Name
                and "*Section view" not in idef.Name
                and "*Space" not in idef.Name
                and "*Section" not in idef.Name
                and "*Table" not in idef.Name
            ):
                idef_objects = idef.GetObjects()
                for obj in idef_objects:
                    obj_id = obj.Id
                    obj_layer = rs.ObjectLayer(obj)
                    if material_name in obj_layer:
                        pattern_index = hatch_dict.get(pattern_name, -1)  # Default to -1 if pattern not found
                        va.SetObjectSectionPattern(obj_id, pattern_index, pattern_angle, pattern_scale)
                        va.SetObjectSectionPlotWeight(obj_id, line_weight)
 
                        # Handle Section Pattern Color Source for instance definitions
                        try:
                            if rs.ObjectPrintColorSource(obj) != 1:
                                va.SetObjectSectionPatternColorSource(
                                    obj_id, va.SectionPatternColorSource(section_pattern_color_source)
                                )
                            else:
                                va.SetObjectSectionPatternColorSource(obj_id, va.SectionPatternColorSource(3))
                        except Exception as e:
                            print("Error setting SectionPatternColorSource for instance object: {}".format(e))
 
                        # Handle color assignment for instance definitions
                        if section_pattern_color_source != 3 and rs.ObjectPrintColorSource(obj) != 1:
                            section_color = rs.CreateColor(color)
                            va.SetObjectSectionPatternColor(obj_id, section_color)
    print(material_name)
    
 
def set_user_text(scale): # save scale in document user text
    rs.SetDocumentUserText("printscale", scale)
    print("Scale '{}' saved in document user text".format(scale))
 
def end_message():
    print("All section attributes applied :)")
 
def set_print_info(csv_file):
    scale_configs = read_scale_configs(csv_file)  # Read and group rows by scale
    scales = sorted(scale_configs.keys())
    selected_scale = rs.ListBox(scales, "Pick a scale")  # Prompt user to select a scale
    
    if selected_scale:
        hatch_dict = generate_hatch_patterns_dict()
 
        # Process rows for the selected scale in CSV order
        for config in scale_configs[selected_scale]:
            apply_section_attributes_by_layer_name(
                config['Material'],
                config['Pattern Name'],
                config['Pattern Scale'],
                config['Pattern Angle'],
                config['Line Weight'],
                config['Color Source'],
                config['Color'],
                hatch_dict
            )
        set_user_text(selected_scale)
        end_message()
 
def generate_hatch_patterns_dict():
    hatch_patterns = rs.HatchPatternNames()
    hatch_dict = {name: index for index, name in enumerate(hatch_patterns)}
    return hatch_dict
 
if __name__ == "__main__":
    set_print_info("section_properties.csv")

Exemple de fichier de propriétés de section

Le fichier d'exemple suivant fonctionne avec la logique décrite dans Hiérarchie de modélisation. Il est ici à titre de référence et peut être mis à jour en fonction de la logique des calques propre à votre pratique.

Scale,Material,Pattern Name,Pattern Scale,Pattern Angle,Line Weight,Color Source,Color
Patterned:1/20,Beton,HatchDash,14.00,pi/4,0.360,display,[]
Patterned:1/20,Isolant,Grid,14.00,pi/4,0.135,display,[]
Patterned:1/20,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Patterned:1/20,IsolantPaille,Plus,3.50,pi/4,0.135,display,[]
Patterned:1/20,Acoustique,Grid,7.00,pi/4,0.135,display,[]
Patterned:1/20,Dallage,HatchDash,7.00,pi/4,0.150,display,[]
Patterned:1/20,Chape,HatchDash,7.00,pi/4,0.150,display,[]
Patterned:1/20,Lino,Solid,1.00,0,0.135,display,[]
Patterned:1/20,SolSouple,Solid,1.00,0,0.135,display,[]
Patterned:1/20,Carrelage,Solid,1.00,0,0.135,display,[]
Patterned:1/20,Acier,Solid,1.00,0,0.075,display,[]
Patterned:1/20,Bois,Single,0.50,-pi/4,0.135,display,[]
Patterned:1/20,Brique,HatchDash,14.00,pi/4,0.360,display,[]
Patterned:1/20,Structure-brique,HatchDash,7.00,-pi/4,0.360,display,[]
Patterned:1/20,Pierre-moellons,HatchDash,14.00,pi/4,0.360,display,[]
Patterned:1/20,Pierre-taille,HatchDash,7.00,-pi/4,0.225,display,[]
Patterned:1/20,Pierre,HatchDash,7.00,-pi/4,0.225,display,[]
Patterned:1/20,Enduit-blanc,Single,0.70,pi/4,0.225,display,[]
Patterned:1/20,Enduit,Single,0.70,pi/4,0.225,display,[]
Patterned:1/20,Fermacell,Single,1.40,pi/4,0.075,display,[]
Patterned:1/20,Placoplatre,Single,1.40,pi/4,0.075,display,[]
Patterned:1/20,Tuile,Solid,1.00,0,0.150,object,"[150,150,150]"
Patterned:1/20,Zinc,Solid,1.00,0,0.135,display,[]
Patterned:1/20,Serrurerie,Solid,1.00,0,0.135,object,"[100,100,100]"
Patterned:1/20,Fenetre::Bois,Solid,1.00,0,0.215,object,"[100,100,100]"
Patterned:1/20,Fenetre::Alu,Solid,1.00,0,0.215,object,"[100,100,100]"
Patterned:1/20,Fenetre::Metal,Solid,1.00,0,0.215,object,"[100,100,100]"
Patterned:1/20,Porte::Bois,Solid,1.00,0,0.215,object,"[100,100,100]"
Patterned:1/20,Porte::Alu,Solid,1.00,0,0.215,object,"[100,100,100]"
Patterned:1/20,Verre,Solid,1.00,0,0.075,display,[]
Patterned:1/20,Murs::Verre,Solid,1.00,0,0.075,object,"[200,200,200]"
Patterned:1/20,BardageAcierIsole,Grid,14.00,pi/4,0.135,display,[]
Patterned:1/20,Toile,Solid,1.00,0,0.075,display,[]
Patterned:1/50,Beton,HatchDash,20.00,pi/4,0.225,display,[]
Patterned:1/50,Isolant,Grid,15.00,pi/4,0.135,display,[]
Patterned:1/50,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Patterned:1/50,IsolantPaille,Plus,3.00,pi/4,0.135,display,[]
Patterned:1/50,Acoustique,Grid,10.00,pi/4,0.135,display,[]
Patterned:1/50,Dallage,HatchDash,10.00,pi/4,0.150,display,[]
Patterned:1/50,Chape,HatchDash,10.00,pi/4,0.150,display,[]
Patterned:1/50,Lino,Solid,1.00,0,0.135,display,[]
Patterned:1/50,SolSouple,Solid,1.00,0,0.135,display,[]
Patterned:1/50,Carrelage,Solid,1.00,0,0.135,display,[]
Patterned:1/50,Acier,Solid,1.00,0,0.075,display,[]
Patterned:1/50,Bois,Single,2.00,-pi/4,0.135,display,[]
Patterned:1/50,Brique,HatchDash,20.00,pi/4,0.225,display,[]
Patterned:1/50,Structure-brique,HatchDash,10.00,-pi/4,0.225,display,[]
Patterned:1/50,Pierre-moellons,HatchDash,20.00,pi/4,0.225,display,[]
Patterned:1/50,Pierre-taille,HatchDash,10.00,-pi/4,0.225,display,[]
Patterned:1/50,Pierre,HatchDash,10.00,-pi/4,0.225,display,[]
Patterned:1/50,Enduit-blanc,Single,1.00,pi/4,0.135,object,"[180,180,180]"
Patterned:1/50,Enduit,Single,1.00,pi/4,0.135,object,"[180,180,180]"
Patterned:1/50,Fermacell,Single,2.00,pi/4,0.075,display,[]
Patterned:1/50,Placoplatre,Single,2.00,pi/4,0.075,display,[]
Patterned:1/50,Tuile,Solid,1.00,0,0.150,object,"[150,150,150]"
Patterned:1/50,Zinc,Solid,1.00,0,0.135,display,[]
Patterned:1/50,Serrurerie,Solid,1.00,0,0.075,object,"[200,200,200]"
Patterned:1/50,Fenetre::Bois,Solid,1.00,0,0.135,object,"[200,200,200]"
Patterned:1/50,Fenetre::Alu,Solid,1.00,0,0.135,object,"[200,200,200]"
Patterned:1/50,Fenetre::Metal,Solid,1.00,0,0.135,object,"[200,200,200]"
Patterned:1/50,Porte::Bois,Solid,1.00,0,0.135,object,"[200,200,200]"
Patterned:1/50,Porte::Alu,Solid,1.00,0,0.135,object,"[200,200,200]"
Patterned:1/50,Verre,Solid,1.00,0,0.075,display,[]
Patterned:1/50,Murs::Verre,Solid,1.00,0,0.075,object,"[250,250,250]"
Patterned:1/50,BardageAcierIsole,Grid,15.00,pi/4,0.135,display,[]
Patterned:1/50,Toile,Solid,1.00,0,0.075,display,[]
Patterned:1/100,Beton,HatchDash,40.00,pi/4,0.225,display,[]
Patterned:1/100,Isolant,Grid,30.00,pi/4,0.075,display,[]
Patterned:1/100,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Patterned:1/100,IsolantPaille,Plus,6.00,pi/4,0.075,display,[]
Patterned:1/100,Acoustique,Grid,20.00,pi/4,0.075,display,[]
Patterned:1/100,Dallage,HatchDash,20.00,pi/4,0.150,display,[]
Patterned:1/100,Chape,HatchDash,20.00,pi/4,0.150,display,[]
Patterned:1/100,Lino,Solid,1.00,0,0.015,display,[]
Patterned:1/100,SolSouple,Solid,1.00,0,0.015,display,[]
Patterned:1/100,Carrelage,Solid,1.00,0,0.015,display,[]
Patterned:1/100,Acier,Solid,1.00,0,0.015,display,[]
Patterned:1/100,Bois,Single,4.00,-pi/4,0.135,display,[]
Patterned:1/100,Brique,HatchDash,40.00,pi/4,0.225,display,[]
Patterned:1/100,Structure-brique,HatchDash,20.00,-pi/4,0.225,display,[]
Patterned:1/100,Pierre-moellons,HatchDash,40.00,pi/4,0.225,display,[]
Patterned:1/100,Pierre-taille,HatchDash,20.00,-pi/4,0.225,display,[]
Patterned:1/100,Pierre,HatchDash,20.00,-pi/4,0.225,display,[]
Patterned:1/100,Enduit-blanc,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Enduit,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Fermacell,Single,4.00,pi/4,0.075,display,[]
Patterned:1/100,Placoplatre,Single,4.00,pi/4,0.075,display,[]
Patterned:1/100,Tuile,Solid,1.00,0,0.135,object,"[150,150,150]"
Patterned:1/100,Zinc,Solid,1.00,0,0.075,display,[]
Patterned:1/100,Serrurerie,Solid,1.00,0,0.015,object,"[255,255,255]"
Patterned:1/100,Fenetre::Bois,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Fenetre::Alu,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Fenetre::Metal,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Porte::Bois,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Porte::Alu,Solid,1.00,0,0.135,object,"[255,255,255]"
Patterned:1/100,Verre,Solid,1.00,0,0.015,display,[]
Patterned:1/100,Murs::Verre,Solid,1.00,0,0.015,object,"[250,250,250]"
Patterned:1/100,BardageAcierIsole,Grid,30.00,pi/4,0.075,display,[]
Patterned:1/100,Toile,Solid,1.00,0,0.015,display,[]
Patterned:1/200,Beton,HatchDash,80.00,pi/4,0.300,display,[]
Patterned:1/200,Isolant,Grid,40.00,pi/4,0.100,display,[]
Patterned:1/200,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Patterned:1/200,IsolantPaille,Plus,12.00,pi/4,0.100,display,[]
Patterned:1/200,Acoustique,Grid,60.00,pi/4,0.100,display,[]
Patterned:1/200,Dallage,HatchDash,40.00,pi/4,0.200,display,[]
Patterned:1/200,Chape,HatchDash,40.00,pi/4,0.200,display,[]
Patterned:1/200,Lino,Solid,1.00,0,0.020,display,[]
Patterned:1/200,SolSouple,Solid,1.00,0,0.020,display,[]
Patterned:1/200,Carrelage,Solid,1.00,0,0.020,display,[]
Patterned:1/200,Acier,Solid,1.00,0,0.020,display,[]
Patterned:1/200,Bois,Single,6.00,-pi/4,0.180,display,[]
Patterned:1/200,Brique,HatchDash,80.00,pi/4,0.300,display,[]
Patterned:1/200,Structure-brique,HatchDash,40.00,-pi/4,0.300,display,[]
Patterned:1/200,Pierre-moellons,HatchDash,80.00,pi/4,0.300,display,[]
Patterned:1/200,Pierre-taille,HatchDash,40.00,-pi/4,0.300,display,[]
Patterned:1/200,Pierre,HatchDash,40.00,-pi/4,0.300,display,[]
Patterned:1/200,Enduit-blanc,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Enduit,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Fermacell,Single,8.00,pi/4,0.100,display,[]
Patterned:1/200,Placoplatre,Single,8.00,pi/4,0.100,display,[]
Patterned:1/200,Tuile,Solid,1.00,0,0.180,object,"[150,150,150]"
Patterned:1/200,Zinc,Solid,1.00,0,0.100,display,[]
Patterned:1/200,Serrurerie,Solid,1.00,0,0.020,object,"[255,255,255]"
Patterned:1/200,Fenetre::Bois,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Fenetre::Alu,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Fenetre::Metal,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Porte::Bois,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Porte::Alu,Solid,1.00,0,0.180,object,"[255,255,255]"
Patterned:1/200,Verre,Solid,1.00,0,0.020,display,[]
Patterned:1/200,Murs::Verre,Solid,1.00,0,0.020,object,"[250,250,250]"
Patterned:1/200,BardageAcierIsole,Grid,40.00,pi/4,0.100,display,[]
Patterned:1/200,Toile,Solid,1.00,0,0.020,display,[]
Solid:1/20,Beton,Solid,1.00,0,0.360,object,"[150,150,150]"
Solid:1/20,Isolant,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Solid:1/20,IsolantPaille,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Acoustique,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Dallage,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/20,Chape,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/20,Lino,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,SolSouple,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Carrelage,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Acier,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/20,Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Brique,Solid,1.00,0,0.360,object,"[150,150,150]"
Solid:1/20,Structure-brique,Solid,1.00,0,0.360,object,"[150,150,150]"
Solid:1/20,Pierre-moellons,Solid,1.00,0,0.360,object,"[150,150,150]"
Solid:1/20,Pierre-taille,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/20,Pierre,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/20,Enduit-blanc,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/20,Enduit,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/20,Fermacell,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/20,Placoplatre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/20,Tuile,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/20,Zinc,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Serrurerie,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Fenetre::Bois,Solid,1.00,0,0.215,object,"[150,150,150]"
Solid:1/20,Fenetre::Alu,Solid,1.00,0,0.215,object,"[150,150,150]"
Solid:1/20,Fenetre::Metal,Solid,1.00,0,0.215,object,"[150,150,150]"
Solid:1/20,Porte::Bois,Solid,1.00,0,0.215,object,"[150,150,150]"
Solid:1/20,Porte::Alu,Solid,1.00,0,0.215,object,"[150,150,150]"
Solid:1/20,Verre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/20,Murs::Verre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/20,BardageAcierIsole,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/20,Toile,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Beton,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Isolant,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Solid:1/50,IsolantPaille,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Acoustique,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Dallage,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/50,Chape,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/50,Lino,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,SolSouple,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Carrelage,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Acier,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Brique,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Structure-brique,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Pierre-moellons,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Pierre-taille,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Pierre,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/50,Enduit-blanc,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Enduit,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Fermacell,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Placoplatre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Tuile,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/50,Zinc,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Serrurerie,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Fenetre::Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Fenetre::Alu,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Fenetre::Metal,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Porte::Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Porte::Alu,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Verre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,Murs::Verre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/50,BardageAcierIsole,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/50,Toile,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Beton,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Isolant,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Solid:1/100,IsolantPaille,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Acoustique,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Dallage,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/100,Chape,Solid,1.00,0,0.150,object,"[150,150,150]"
Solid:1/100,Lino,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,SolSouple,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,Carrelage,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,Acier,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Brique,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Structure-brique,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Pierre-moellons,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Pierre-taille,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Pierre,Solid,1.00,0,0.225,object,"[150,150,150]"
Solid:1/100,Enduit-blanc,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Enduit,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Fermacell,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Placoplatre,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Tuile,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Zinc,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Serrurerie,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,Fenetre::Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Fenetre::Alu,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Fenetre::Metal,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Porte::Bois,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Porte::Alu,Solid,1.00,0,0.135,object,"[150,150,150]"
Solid:1/100,Verre,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,Murs::Verre,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/100,BardageAcierIsole,Solid,1.00,0,0.075,object,"[150,150,150]"
Solid:1/100,Toile,Solid,1.00,0,0.015,object,"[150,150,150]"
Solid:1/200,Beton,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Isolant,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Air,Solid,1.00,0,0.000,object,"[255,255,255]"
Solid:1/200,IsolantPaille,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Acoustique,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Dallage,Solid,1.00,0,0.200,object,"[150,150,150]"
Solid:1/200,Chape,Solid,1.00,0,0.200,object,"[150,150,150]"
Solid:1/200,Lino,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,SolSouple,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,Carrelage,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,Acier,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,Bois,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Brique,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Structure-brique,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Pierre-moellons,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Pierre-taille,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Pierre,Solid,1.00,0,0.300,object,"[150,150,150]"
Solid:1/200,Enduit-blanc,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Enduit,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Fermacell,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Placoplatre,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Tuile,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Zinc,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Serrurerie,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,Fenetre::Bois,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Fenetre::Alu,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Fenetre::Metal,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Porte::Bois,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Porte::Alu,Solid,1.00,0,0.180,object,"[150,150,150]"
Solid:1/200,Verre,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,Murs::Verre,Solid,1.00,0,0.020,object,"[150,150,150]"
Solid:1/200,BardageAcierIsole,Solid,1.00,0,0.100,object,"[150,150,150]"
Solid:1/200,Toile,Solid,1.00,0,0.020,object,"[150,150,150]"