Description

Ce script suit la même logique que la commande Match, mais spécifiquement pour les paramètres VisualArq d’un objet.

Le script suivant fonctionne sur :

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

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

Code

import rhinoscriptsyntax as rs
import clr
clr.AddReference("VisualARQ.Script")
import VisualARQ.Script as va
 
def va_match_parameters():
    objs_to_modify = rs.GetObjects("Select objects to modify", filter=0, preselect=True)
    if not objs_to_modify:
        print("No objects selected.")
        return
 
    source_obj = rs.GetObject("Select source object", filter=0, preselect=False)
    if not source_obj:
        print("No source object selected.")
        return
 
    rs.EnableRedraw(False)
 
    source_parameters_ids = va.GetAllObjectParameterIds(source_obj, True)
    parameter_names = [va.GetParameterName(param_id) for param_id in source_parameters_ids]
 
    last_selected = rs.GetDocumentData("MatchParameters", "LastSelected")
    if last_selected:
        last_selected = last_selected.split(",")
 
    check_list_items = [(param, (param in last_selected if last_selected else False)) for param in parameter_names]
 
    parameters_to_copy = rs.CheckListBox(check_list_items, "Select Parameters to Copy", "Choose parameters:")
    if not parameters_to_copy:
        print("No parameters selected.")
        return
 
    selected_parameters = [param for param, checked in parameters_to_copy if checked]
    rs.SetDocumentData("MatchParameters", "LastSelected", ",".join(selected_parameters))
 
    for obj in objs_to_modify:
        for param in selected_parameters:
            param_id = source_parameters_ids[parameter_names.index(param)]
            param_value = va.GetParameterValue(param_id, source_obj)
            va.SetParameterValue(param_id, obj, param_value)
 
    rs.EnableRedraw(True)
    print(str(len(objs_to_modify)) + " objects modified.")
 
if __name__ == "__main__":
    va_match_parameters()