diff --git a/Architectural Parts/Doors_Windows/Get_parametric_model.FCMacro b/Architectural Parts/Doors_Windows/Get_parametric_model.FCMacro new file mode 100644 index 00000000..26a3f80c --- /dev/null +++ b/Architectural Parts/Doors_Windows/Get_parametric_model.FCMacro @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2024 Francisco Rosa * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Macro get model +++++++++++++++++++++++++++++++++++++++++++++++++ + +import FreeCAD +import FreeCADGui as Gui +import Spreadsheet + +# ---------------------------------------------------------------------- +## GET MODEL FROM SPREADSHEET +# ---------------------------------------------------------------------- +name = "None" +value = None +cellName = "None" +cellRows = [] +cellValue = "None" +obj = "None" +propertyType = None +propName = "None" +objects = [] +column = None +SpreadsheetModels = None +propertyRows = {} + +# Get the property name with the initial information + +propName = input("Confirme the name of the properties set or VarSet wich Label is 'Initial_information' (Ex.: Prop, Prop001, Prop002...or Varset, Varset001, Varset002...)") + +if not FreeCAD.ActiveDocument.getObject(propName): + print(str(propName) + " is not correct!" + "\n") + +# Get the spreadsheet name for saving model + +SpreadsheetModels = FreeCAD.ActiveDocument.getObject(propName).A_Spreadsheet_models + +objects = FreeCAD.ActiveDocument.getObject(propName).L_Property_objects_list + +CellRows_Lists = [] +CellRows_Lists = objects[0].L_Props_list + +# propertyRows +for i in range(len(objects)): + propertyRows [objects[i].Name] = objects[0].getPropertyByName(CellRows_Lists[i]) + +# 2. Get properties +def getComponentModel(column = "None", objects = None, propertyRows = None, SpreadsheetModels = None): + for i in range(len(objects)): + # Prop, Prop001, ...or VarSet, Varset001... + obj = objects[i] + cellRows = propertyRows[obj.Name] + for n in range(len(cellRows)): + cellValue = column + cellRows[n] + value = str(SpreadsheetModels.get(cellValue)) + if value == "Not used": + continue + cellName = "A" + cellRows[n] + name = SpreadsheetModels.get(cellName) + propertyType = obj.getTypeIdOfProperty(name) + if propertyType == "App::PropertyBool": + value = str(SpreadsheetModels.get(cellValue)) + if value == "True": + value = 1 + else: + value = 0 + setattr(obj, name, value) + continue + if propertyType == "App::PropertyInteger": + value = SpreadsheetModels.get(cellValue) + setattr(obj, name, value) + continue + setattr(obj, name, value) + + App.ActiveDocument.recompute() + +# 1. Models spreadsheet - get model column +# Condition to get model +if objects[0].B_Confirm_model == True: + objects = FreeCAD.ActiveDocument.getObject(propName).L_Property_objects_list + column = objects[0].A_Model_name[0] + getComponentModel(column, objects, propertyRows, SpreadsheetModels) + objects[0].B_Confirm_model = False + App.ActiveDocument.recompute() + # Select the Prop or VarSet + Gui.Selection.clearSelection() + Gui.Selection.addSelection(SpreadsheetModels) + Gui.Selection.clearSelection() + Gui.Selection.addSelection(objects[0]) + App.ActiveDocument.recompute() +else: + print("First you must choose or confirm the ​model name in 'Prop_General_configurations or Varset_General_configurations > I1-Get model configurations'> A_Model_name', then choose 'true' in 'B_Confirm_model!") + +#----------------------------------------------------------------------- \ No newline at end of file diff --git a/Architectural Parts/Doors_Windows/Save_parametric_models.FCMacro b/Architectural Parts/Doors_Windows/Save_parametric_models.FCMacro new file mode 100644 index 00000000..1494fea6 --- /dev/null +++ b/Architectural Parts/Doors_Windows/Save_parametric_models.FCMacro @@ -0,0 +1,181 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2024 Francisco Rosa * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Macro Save models +++++++++++++++++++++++++++++++++++++++++++++++++ + +import FreeCAD +import FreeCADGui as Gui +import Spreadsheet + +# ---------------------------------------------------------------------- +## SAVE MODEL FROM PROPERTIES TO SPREADSHEET +# ---------------------------------------------------------------------- + +# 2. Get and save properties +# 2.1. Organize the properties + +name = "None" +value = "None" +obj = None +group = "None" +group1 = "None" +group2 = "None" +propName = 'None' +objects = [] +SpreadsheetModels = None + +# Get the property name with the initial information + +propName = input("Confirme the name of the properties set or VarSet wich Label is 'Initial_information' (Ex.: Prop, Prop001, Prop002... or VarSet, VarSet001, VarSet002...)") + +if not FreeCAD.ActiveDocument.getObject(propName): + print(str(propName) + " is not correct!" + "\n") + +# Get the spreadsheet name for saving model + +SpreadsheetModels = FreeCAD.ActiveDocument.getObject(propName).A_Spreadsheet_models + +# objects = [Prop, Prop001, ...] + +objects = FreeCAD.ActiveDocument.getObject(propName).L_Property_objects_list + +def saveComponentModel(column = "None", objects = None, SpreadsheetModels = None): + groupAnt = "None" + cellName = "None" + cellValue = "None" + N = 0 + T = 0 + cellNumber = 0 + cellValue = column + str(1) + SpreadsheetModels.setBackground(cellValue, (0.666667,0.666667,0.000000)) + for i in range(len(objects)): + # Prop, Prop001, ... + obj = objects[i] + name = "Label" + value = obj.getPropertyByName(name) + # Prop to SpreadsheetModels: + cellValue = column + str(3 + T) + SpreadsheetModels.set(cellValue, value) + SpreadsheetModels.setStyle(cellValue, 'bold', 'add') + SpreadsheetModels.setBackground(cellValue, (0.666667,0.666667,0.000000)) + App.ActiveDocument.recompute() + N += 1 + T += 1 + App.ActiveDocument.recompute() + # End save Prop to SpreadsheetModels + propertyNames = [] + propertyNames = obj.PropertiesList + groups = [] + # groups = sorted(groups) + for n in range(len(propertyNames)): + name = propertyNames[n] + group = obj.getGroupOfProperty(name) + if group not in ("", "Base"): + if group != groupAnt and group not in groups: + groups.append(group) + + groups = sorted(groups) + # Save properties + for i in range(len(groups)): + group2 = groups[i] + cellValue = column + str(3 + T) + # group background + SpreadsheetModels.setBackground(cellValue, (0.666667,0.666667,0.000000)) + App.ActiveDocument.recompute() + N += 1 + T += 1 + counter = 0 + # Save value properties by group + for n in range(len(propertyNames)): + name = propertyNames[n] + group1 = obj.getGroupOfProperty(name) + value = obj.getPropertyByName(name) + propertyType = None + propertyType = obj.getTypeIdOfProperty(name) + if group1 == group2 and name[0] != "D" and propertyType not in ('App::PropertyLink', 'App::PropertyLinkList', 'App::PropertyStringList'): + # Property to SpreadsheetModels + cellValue = column + str(3 + T) + if obj.Visibility == False: + value = "Not used" + SpreadsheetModels.set(cellValue, value) + SpreadsheetModels.setForeground(cellValue, (0.501961,0.501961,0.501961)) + else: + value = str(obj.getPropertyByName(name)) + SpreadsheetModels.set(cellValue, value) + N += 1 + T += 1 + counter += 1 + App.ActiveDocument.recompute() + # Delete group is no usefull data + if counter == 0: + N -= 1 + T -= 1 + cells = "None" + cells = column + str(2) + ":" + column + str(2000) + SpreadsheetModels.setAlignment(cells, 'center', 'keep') + SpreadsheetModels.setAlignment(cells, 'vcenter', 'keep') + App.ActiveDocument.recompute() + T = N + T += 1 + + # 3. Include the model name in the list of options. + + obj = None + listModels = [] + modelName = "None" + obj = objects[0] + modelName = column + " - " + nameTitle + " " + obj.A_General_label + listModels = obj.A_Model_list + listModels.append(modelName) + obj.A_Model_list = listModels + obj.A_Model_name = [f for f in obj.A_Model_list] + App.ActiveDocument.recompute() + +# 1. Models spreadsheet - create model title + +nameTitle = "None" +cellTitle = "None" +column = None + +# Condition to save the model +if objects[0].B_Confirm_values == True: + column = objects[0].A_New_model_column_spreadsheet + cellTitle = column + str(2) + nameTitle = objects[0].A_New_model_name + SpreadsheetModels.set(cellTitle, nameTitle) + App.ActiveDocument.recompute() + SpreadsheetModels.setStyle(cellTitle, 'bold', 'add') + App.ActiveDocument.recompute() + objects[0].B_Confirm_values = False + saveComponentModel(column, objects, SpreadsheetModels) + # Select the SpreadsheetModels + Gui.Selection.clearSelection() + Gui.Selection.addSelection(SpreadsheetModels) + App.ActiveDocument.recompute() + +else: + print("First you must write or confirm the ​spreadsheet column in 'Prop_General_configurations or VarSet_General_configurations> I2_Save_new_model'> A_New_model_column_spreadsheet', the model name in 'A_New_model_name', then choose 'true' in 'B_Confirm_values!") + +# ------------------------------------------------------------------------------------------------ \ No newline at end of file