1
1
# -*- coding: utf-8 -*-
2
- """Writes the door swing direction of doors
3
- to a shared parameter."""
4
- __title__ = "DoorMirrorState"
5
2
6
- #IMPORTS
7
- # System
8
3
import time , sys
9
- #pyRevit
10
- from pyrevit import script , DB
4
+ from pyrevit import script , DB , revit , DOCS , forms
11
5
from pyrevit .framework import List
12
- #Autodesk.Revit.DB
13
- from Autodesk .Revit .DB import Transaction , BuiltInParameter
14
6
15
- doc = __revit__ .ActiveUIDocument .Document
16
- uidoc = __revit__ .ActiveUIDocument
17
- app = __revit__ .Application
7
+ doc = DOCS .doc
18
8
output = script .get_output ()
19
9
20
- #GLOBAL PARAMETERS
21
- DOORDIR_STANDARD_PARAM = "DoorFamilyOpeningDirection_standard"
22
- DOORDIR_MIRRORED_PARAM = "DoorFamilyOpeningDirection_mirrored"
10
+ DOORDIR_STANDARD_PARAM = "DoorFamilyOpeningDirection_standard"
11
+ DOORDIR_MIRRORED_PARAM = "DoorFamilyOpeningDirection_mirrored"
23
12
DOORDIR_WRITEBACK_PARAM = "Door Wing Opening Direction"
24
- DOORDIR_ERROR_VALUE = "-" # Value if the family does't have shared param. above
13
+ DOORDIR_ERROR_VALUE = "-" # Value if the family does't have shared param. above
25
14
26
- #MAIN
15
+ # MAIN
27
16
timer_start = time .time ()
28
17
29
18
# GET ALL DOORS
30
- doors_collector = DB .FilteredElementCollector (doc ).OfCategory (DB .BuiltInCategory .OST_Doors ).WhereElementIsNotElementType ().ToElements ()
19
+ doors_collector = (
20
+ DB .FilteredElementCollector (doc )
21
+ .OfCategory (DB .BuiltInCategory .OST_Doors )
22
+ .WhereElementIsNotElementType ()
23
+ .ToElements ()
24
+ )
25
+
31
26
if not doors_collector :
32
- sys .exit ("No doors were found in the project." )
27
+ forms .alert ("No doors found in the model." , title = "Warning" )
28
+ script .exit ()
29
+
33
30
34
- # FUNCTION TO CHECK IF PARAMETER EXISTS
35
31
def parameter_exists (parameter_name ):
36
32
binding_map = doc .ParameterBindings
37
33
iterator = binding_map .ForwardIterator ()
@@ -41,86 +37,114 @@ def parameter_exists(parameter_name):
41
37
return True
42
38
return False
43
39
44
- # CHECK IF TUERAUFG_WRITEBACK_PARAMETER EXISTS
40
+
45
41
if not parameter_exists (DOORDIR_WRITEBACK_PARAM ):
46
- print ("The parameter '{}' does not exist in the current document." .format (DOORDIR_WRITEBACK_PARAM ))
47
- print ("Please create the parameter as an instance parameter, option different values for groupes," )
42
+ print (
43
+ "The parameter '{}' does not exist in the current document." .format (
44
+ DOORDIR_WRITEBACK_PARAM
45
+ )
46
+ )
47
+ print (
48
+ "Please create the parameter as an instance parameter, option different values for groupes,"
49
+ )
48
50
print ("for the category doors in the project." )
49
51
50
52
sys .exit ()
51
53
52
- # CREATE CONTAINERS
53
54
count_parameter = 0
54
55
count_not_parameter = 0
55
56
doors_without_parameter = []
56
- # CREATE A LIST FOR DOORS WITH CHANGED PARAMETERS
57
57
data_doors_changed = []
58
58
59
- t = Transaction (doc ,__title__ )
60
- t .Start ()
61
- #door_changed =[]
62
- # LOOP THROUGH ALL DOORS
63
- for door in doors_collector :
64
- # GET VALUE
65
- try :
66
- if door .Mirrored :
67
- value = door .LookupParameter (DOORDIR_MIRRORED_PARAM ).AsString ()
68
- else :
69
- value = door .LookupParameter (DOORDIR_STANDARD_PARAM ).AsString ()
70
- count_parameter += 1
71
-
72
- except :
73
- # IF VALUE IS UNAVAILABLE - USE DEFAULT ERROR VALUE
74
- value = DOORDIR_ERROR_VALUE
75
- count_not_parameter += 1
76
-
77
- # LOG DOOR TYPE WITHOUT VALUE
78
- door_family = door .get_Parameter (BuiltInParameter .ELEM_FAMILY_PARAM ).AsValueString ()
79
- door_type = door .get_Parameter (BuiltInParameter .ELEM_TYPE_PARAM ).AsValueString ()
80
- door_name = "{family}-{type}" .format (family = door_family , type = door_type )
81
- if door_name not in doors_without_parameter :
82
- doors_without_parameter .append (door_name )
83
-
84
- # SET PARAMETER
85
- try :
86
- # CHECK IF THE WRITEBACK PARAMETER EXISTS
87
- door_out_param = door .LookupParameter (DOORDIR_WRITEBACK_PARAM )
88
-
89
- # WRITE CHANGES IN PARAMETERS
90
- door_out_param_old = door_out_param .AsString ()
91
- door_out_param_new = value
92
- if door_out_param_old != door_out_param_new :
93
- door_out_param_changed = "{} -> {}" .format (door_out_param_old , door_out_param_new )
94
- door_name = door .Name
95
- door_changed_link = output .linkify (door .Id )
96
- data_doors_changed .append ([door_name , door_out_param_changed , door_changed_link ])
97
- # SET DOOR FLIP STATE TO THE WRITEBACK PARAMETER
98
- door_out_param .Set (str (value ))
99
- except :
100
- print ('Please make sure OUT instance parameter exists: {}' .format (DOORDIR_WRITEBACK_PARAM ))
101
- sys .exit ()
102
- t .Commit ()
103
-
104
- # FINAL PRINT
105
- output .print_md ('### Number of doors found in the project: {} ' .format (len (doors_collector )))
106
- output .print_md ('of these with writeback parameters defined in door family: {}' .format (count_parameter ))
107
- output .print_md ('without writeback parameters defined in door family: {a}' .format (a = count_not_parameter ,))
108
- output .print_md ('parameters missing: ' "'{b}'" ', ' "'{c}'" '' .format (b = DOORDIR_STANDARD_PARAM , c = DOORDIR_MIRRORED_PARAM ))
109
- output .print_md ('you will find in the folder of the script a shared parameter file containing this parameters.' )
110
- output .print_md ('The default writeback value for doors without defined values will be : ' " {d} " ' ' .format (d = DOORDIR_ERROR_VALUE ))
111
- output .print_md ('---' )
112
- output .print_md ('### Door families without writeback parameter defined in family:' )
59
+ with revit .Transaction (doc , "DoorMirrorState" ):
60
+ for door in doors_collector :
61
+ try :
62
+ if door .Mirrored :
63
+ value = door .LookupParameter (DOORDIR_MIRRORED_PARAM ).AsString ()
64
+ else :
65
+ value = door .LookupParameter (DOORDIR_STANDARD_PARAM ).AsString ()
66
+ count_parameter += 1
67
+
68
+ except AttributeError :
69
+ value = DOORDIR_ERROR_VALUE
70
+ count_not_parameter += 1
71
+
72
+ door_family = door .get_Parameter (
73
+ DB .BuiltInParameter .ELEM_FAMILY_PARAM
74
+ ).AsValueString ()
75
+ door_type = door .get_Parameter (
76
+ DB .BuiltInParameter .ELEM_TYPE_PARAM
77
+ ).AsValueString ()
78
+ door_name = "{family}-{type}" .format (family = door_family , type = door_type )
79
+ if door_name not in doors_without_parameter :
80
+ doors_without_parameter .append (door_name )
81
+
82
+ try :
83
+ door_out_param = door .LookupParameter (DOORDIR_WRITEBACK_PARAM )
84
+
85
+ door_out_param_old = door_out_param .AsString ()
86
+ door_out_param_new = value
87
+ if door_out_param_old != door_out_param_new :
88
+ door_out_param_changed = "{} -> {}" .format (
89
+ door_out_param_old , door_out_param_new
90
+ )
91
+ door_name = door .Name
92
+ door_changed_link = output .linkify (door .Id )
93
+ data_doors_changed .append (
94
+ [door_name , door_out_param_changed , door_changed_link ]
95
+ )
96
+ door_out_param .Set (str (value ))
97
+ except AttributeError :
98
+ print (
99
+ "Please make sure instance parameter exists: {}" .format (
100
+ DOORDIR_WRITEBACK_PARAM
101
+ )
102
+ )
103
+
104
+ output .print_md (
105
+ "### Number of doors found in the project: {} " .format (len (doors_collector ))
106
+ )
107
+ output .print_md (
108
+ "of these with writeback parameters defined in door family: {}" .format (
109
+ count_parameter
110
+ )
111
+ )
112
+ output .print_md (
113
+ "without writeback parameters defined in door family: {a}" .format (
114
+ a = count_not_parameter ,
115
+ )
116
+ )
117
+ output .print_md (
118
+ "parameters missing: "
119
+ "'{b}'"
120
+ ", "
121
+ "'{c}'"
122
+ "" .format (b = DOORDIR_STANDARD_PARAM , c = DOORDIR_MIRRORED_PARAM )
123
+ )
124
+ output .print_md (
125
+ "you will find in the folder of the script a shared parameter file containing this parameters."
126
+ )
127
+ output .print_md (
128
+ "The default writeback value for doors without defined values will be : "
129
+ " {d} "
130
+ " " .format (d = DOORDIR_ERROR_VALUE )
131
+ )
132
+ output .print_md ("---" )
133
+ output .print_md ("### Door families without writeback parameter defined in family:" )
113
134
for door_type in doors_without_parameter :
114
135
print (door_type )
115
- output .print_md (' ---' )
116
- output .print_md (' ### Changes to previous run of the script:' )
136
+ output .print_md (" ---" )
137
+ output .print_md (" ### Changes to previous run of the script:" )
117
138
118
- # Create a table for changed parameter values
119
139
if data_doors_changed :
120
- output .print_table (table_data = data_doors_changed , title = "Doors with changed parameters:" , columns = ["Door" , "Changed Value (old->new)" , "ElementId" ])
140
+ output .print_table (
141
+ table_data = data_doors_changed ,
142
+ title = "Doors with changed parameters:" ,
143
+ columns = ["Door" , "Changed Value (old->new)" , "ElementId" ],
144
+ )
121
145
else :
122
- output .print_md (' #### No doors with changed parameters were found.' )
146
+ output .print_md (" #### No doors with changed parameters were found." )
123
147
124
- # End
125
- output . print_md ( '---' )
126
- output .print_md (' #### Script has finished in {}s' .format (time . time () - timer_start ))
148
+ output . print_md ( "---" )
149
+ elapsed_time = time . time () - timer_start
150
+ output .print_md (" #### Script has finished in {:.2f}s" .format (elapsed_time ))
0 commit comments