Description

Set section attributes to VisualArq and Rhino objects.

Purpose

This script automates the process of assigning section attributes to objects and instance definitions in a Rhino and VisualArq model, based on configurations specified in a CSV file. It allows users to select a scale and apply section patterns, colors, and other attributes to objects by layer name.

Prerequisites

  • A CSV file (section_properties.csv) containing the necessary configuration details for scales, materials, and attributes (an example is available below).
  • Rhino 7 and VisualArq 2 (quickly tested on VisualArq 3 and no major break identified).

Process Overview

  1. Load Configuration

    • The script reads the CSV file to retrieve configurations for section patterns, colors, and other attributes.
    • Scales and their associated material configurations are stored in a dictionary for later use.
  2. User Scale Selection

    • The script dynamically lists all scales found in the CSV file.
    • Users select a scale via a dialog box in Rhino.
  3. Generate Hatch Pattern Dictionary

    • The script generates a dictionary mapping hatch pattern names to their indices for quick lookup.
  4. Apply Section Attributes

    • For each material in the selected scale configuration:
      • Objects and instance definitions matching the material’s name in their layer name are identified.
      • Section patterns, colors, line weights, and other attributes are applied to these objects.
  5. Save Scale to User Text

    • The selected scale is saved in the document’s user text (this is used in the Print2 script to inform the user of the current section scale applied before printing).

CSV File Format

The CSV file should have the following columns:

  • Scale: The scale category (e.g., 1:50).
  • Material: The material name.
  • Pattern Name: The name of the section pattern to apply.
  • Pattern Scale: The scale of the pattern.
  • Pattern Angle: The rotation angle of the pattern (in radians or as pi expressions).
  • Line Weight: The line weight to apply to the section.
  • Color Source: Specifies the source for the pattern color (object, parent, layer, or display).
  • Color: The RGB color values (e.g., [255, 0, 0]).

Warning

Keep in mind that the script reads the csv line after line, and tries to match the object’s layer name with the string from the Material column. This means that if you have two entries like NaturalStone and Stone in the CSV, for which you would like to apply different section attributes, you should place the Stone entry before the NaturalStone entry.

Best practice is to always place more generic material names (like Stonebefore more specific ones (like NaturalStone) in the CSV file. This ensures that specific materials are overriden after generic materials were applied.

For more info about the in keyword, used to compare layer names and material names: see the documentation of the in keyword.

How to Run the Script

  1. Place the script in a Python file, stored wherever fits the best for you.
  2. Ensure section_properties.csv is in the same directory or specify its path in the set_print_info function.
  3. Execute the script in Rhino via the Python editor or the command line.

Notes

  • The script includes error handling for invalid angles, color sources, and color values.
  • The script applies section attributes for objects in nested blocks.
  • Objects with specific naming conventions (e.g., *Plan view, *Section view) are excluded from processing for faster run.
  • Default values are provided for color and pattern attributes in case of parsing errors.

Limitations

  • The script assumes consistent layer naming conventions that include material names (see logic described in Layer tree).
  • Only objects and instance definitions are processed.

See also

Layer tree logic. Print2 script.

Author and license

Script by MLAV.LAND, licensed under the GNU GPL 3 License.

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")

Example of section properties file

Info

The following example file works with our french-named Layer tree. It is here for reference and should be updated according to your preferred layer logic.

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]"