1
1
# -*- coding: UTF-8 -*-
2
2
"""Lists all linked and imported DWG instances with worksets and creator."""
3
- import clr
4
3
from collections import defaultdict
5
4
6
5
from pyrevit import revit , DB
9
8
10
9
11
10
output = script .get_output ()
11
+ mlogger = script .get_logger ()
12
12
13
13
14
14
def listdwgs (current_view_only = False ):
15
- dwgs = DB .FilteredElementCollector (revit .doc )\
16
- .OfClass (DB .ImportInstance )\
17
- .WhereElementIsNotElementType ()\
18
- .ToElements ()
15
+ dwgs = (
16
+ DB .FilteredElementCollector (revit .doc )
17
+ .OfClass (DB .ImportInstance )
18
+ .WhereElementIsNotElementType ()
19
+ .ToElements ()
20
+ )
19
21
20
22
dwgInst = defaultdict (list )
21
23
22
24
output .print_md ("## LINKED AND IMPORTED DWG FILES:" )
23
- output .print_md ('By: [{}]({})' .format ('Frederic Beaupere' ,
24
- 'https://github.com/frederic-beaupere' ))
25
+ output .print_md (
26
+ "By: [{}]({})" .format (
27
+ "Frederic Beaupere" , "https://github.com/frederic-beaupere"
28
+ )
29
+ )
25
30
26
31
for dwg in dwgs :
27
32
if dwg .IsLinked :
@@ -33,34 +38,56 @@ def listdwgs(current_view_only=False):
33
38
output .print_md ("####{}" .format (link_mode ))
34
39
for dwg in dwgInst [link_mode ]:
35
40
dwg_id = dwg .Id
36
- dwg_name = \
37
- dwg .Parameter [DB .BuiltInParameter .IMPORT_SYMBOL_NAME ].AsString ()
41
+ dwg_name = dwg .Parameter [DB .BuiltInParameter .IMPORT_SYMBOL_NAME ].AsString ()
38
42
dwg_workset = revit .query .get_element_workset (dwg ).Name
39
- dwg_instance_creator = \
40
- DB . WorksharingUtils . GetWorksharingTooltipInfo ( revit .doc ,
41
- dwg . Id ).Creator
43
+ dwg_instance_creator = DB . WorksharingUtils . GetWorksharingTooltipInfo (
44
+ revit .doc , dwg . Id
45
+ ).Creator
42
46
43
- if current_view_only \
44
- and revit .active_view .Id != dwg .OwnerViewId :
47
+ if current_view_only and revit .active_view .Id != dwg .OwnerViewId :
45
48
continue
46
49
47
- print ('\n \n ' )
48
- output .print_md ("**DWG name:** {}\n \n "
49
- "- DWG created by:{}\n \n "
50
- "- DWG id: {}\n \n "
51
- "- DWG workset: {}\n \n "
52
- .format (dwg_name ,
53
- dwg_instance_creator ,
54
- output .linkify (dwg_id ),
55
- dwg_workset ))
56
-
57
-
58
- selected_option = \
59
- forms .CommandSwitchWindow .show (
60
- ['In Current View' ,
61
- 'In Model' ],
62
- message = 'Select search option:'
63
- )
50
+ # Get hosted level name
51
+ level = revit .doc .GetElement (dwg .LevelId )
52
+ level_name = level .Name if level else "N/A"
53
+
54
+ # Get offset using the Transform
55
+ offset_z = "N/A"
56
+ offset_z_m = "N/A"
57
+ try :
58
+ transform = dwg .GetTransform ()
59
+ if transform :
60
+ offset_z = transform .Origin .Z # in feet
61
+ offset_z_m = DB .UnitUtils .ConvertFromInternalUnits (
62
+ offset_z , DB .UnitTypeId .Meters
63
+ )
64
+ except Exception as ex :
65
+ mlogger .debug (
66
+ "Failed to convert offset Z from internal units: {}" .format (ex )
67
+ )
68
+
69
+ print ("\n \n " )
70
+ output .print_md (
71
+ "**DWG name:** {}\n \n "
72
+ "- DWG created by: {}\n \n "
73
+ "- DWG id: {}\n \n "
74
+ "- DWG workset: {}\n \n "
75
+ "- Hosted level: {}\n \n "
76
+ "- Offset from level (Z): {} ft ({} m)\n \n " .format (
77
+ dwg_name ,
78
+ dwg_instance_creator ,
79
+ output .linkify (dwg_id ),
80
+ dwg_workset ,
81
+ level_name ,
82
+ offset_z ,
83
+ offset_z_m ,
84
+ )
85
+ )
86
+
87
+
88
+ selected_option = forms .CommandSwitchWindow .show (
89
+ ["In Current View" , "In Model" ], message = "Select search option:"
90
+ )
64
91
65
92
if selected_option :
66
- listdwgs (current_view_only = selected_option == ' In Current View' )
93
+ listdwgs (current_view_only = selected_option == " In Current View" )
0 commit comments