Skip to content

Commit 58cc1ad

Browse files
committed
Merge branch 'develop' into release/46beta
2 parents b1db3a8 + 997c4f1 commit 58cc1ad

File tree

15 files changed

+448
-68
lines changed

15 files changed

+448
-68
lines changed

dev/WPFEdit/WPFEdit/WPFEdit.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
44
<PropertyGroup>
@@ -106,6 +106,11 @@
106106
<Generator>MSBuild:Compile</Generator>
107107
<SubType>Designer</SubType>
108108
</Page>
109+
<Page Include="..\..\..\extensions\pyRevitTools.extension\pyRevit.tab\Drawing Set.panel\Sheets.pulldown\ReOrder Sheets.pushbutton\ReOrderWindow.xaml">
110+
<Link>Tools\ReOrderWindow.xaml</Link>
111+
<Generator>MSBuild:Compile</Generator>
112+
<SubType>Designer</SubType>
113+
</Page>
109114
<Page Include="..\..\..\extensions\pyRevitTools.extension\pyRevit.tab\Modify.panel\edit1.stack3\ReValue.pushbutton\ReValueWindow.xaml">
110115
<Link>Tools\ReValueWindow.xaml</Link>
111116
<Generator>MSBuild:Compile</Generator>

extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack3/Spy.pulldown/List Elements.pushbutton/script.py

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
'Selected Line Coordinates',
1919
'Model / Detail / Sketch Lines',
2020
'Project Parameters',
21+
'Unused Shared Parameters',
2122
'Data Schemas',
2223
'Data Schema Entities',
2324
'Sketch Planes',
@@ -103,27 +104,41 @@
103104
c.Category.Name))
104105

105106
elif selected_switch == 'Project Parameters':
106-
pm = revit.doc.ParameterBindings
107-
it = pm.ForwardIterator()
108-
it.Reset()
109-
while it.MoveNext():
110-
p = it.Key
111-
b = pm[p]
112-
if isinstance(b, DB.InstanceBinding):
113-
bind = 'Instance'
114-
elif isinstance(b, DB.TypeBinding):
115-
bind = 'Type'
116-
else:
117-
bind = 'Uknown'
118-
119-
print('PARAM: {0:<10} UNIT: {1:<10} TYPE: {2:<10} '
120-
'GROUP: {3:<20} BINDING: {4}'
121-
'\nAPPLIED TO: {5}\n'.format(p.Name,
122-
str(p.UnitType),
123-
str(p.ParameterType),
124-
str(p.ParameterGroup),
125-
bind,
126-
[c.Name for c in b.Categories]))
107+
output.print_md('## Project Parameters')
108+
for pp in revit.query.get_project_parameters():
109+
if not pp.shared:
110+
output.print_md('#### {}'.format(pp.name))
111+
print('\tUNIT: {}\n\tTYPE: {}\n\tGROUP: {}'
112+
'\n\tBINDING: {}\n\tAPPLIED TO: {}\n'.format(
113+
pp.unit_type,
114+
pp.param_type,
115+
pp.param_group,
116+
pp.param_binding_type,
117+
[x.Name for x in pp.param_binding.Categories]
118+
))
119+
120+
output.print_md('# Shared Parameters')
121+
for pp in revit.query.get_project_parameters():
122+
if pp.shared:
123+
output.print_md('#### {} : {}'.format(pp.name, pp.param_guid))
124+
print('\tUNIT: {}\n\tTYPE: {}\n\tGROUP: {}'
125+
'\n\tBINDING: {}\n\tAPPLIED TO: {}\n'.format(
126+
pp.unit_type,
127+
pp.param_type,
128+
pp.param_group,
129+
pp.param_binding_type,
130+
[x.Name for x in pp.param_binding.Categories]
131+
))
132+
133+
elif selected_switch == 'Unused Shared Parameters':
134+
shared_params = \
135+
set([x.Name + ':' + x.GUID.ToString()
136+
for x in revit.query.get_defined_sharedparams()])
137+
project_params = \
138+
set([x.name + ':' + x.param_guid
139+
for x in revit.query.get_project_parameters() if x.shared])
140+
for unused_shared_param in shared_params - project_params:
141+
print(unused_shared_param)
127142

128143
elif selected_switch == 'Data Schemas':
129144
for sc in DB.ExtensibleStorage.Schema.ListSchemas():
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
Title="Re-Order Sheets" Height="700" Width="600" ShowInTaskbar="False" ResizeMode="CanResizeWithGrip"
4+
WindowStartupLocation="CenterScreen" HorizontalContentAlignment="Center">
5+
<Window.Resources>
6+
<Style x:Key="IndexColumnStyle" TargetType="{x:Type DataGridCell}">
7+
<Setter Property="Foreground" Value="Orange"/>
8+
</Style>
9+
10+
<Style x:Key="DefaultColumnStyle" TargetType="{x:Type DataGridCell}">
11+
<Setter Property="ToolTip" Value="{Binding tooltip}"/>
12+
<Style.Triggers>
13+
<DataTrigger Binding="{Binding printable}" Value="False">
14+
<Setter Property="Foreground" Value="#bdbdbd" />
15+
</DataTrigger>
16+
</Style.Triggers>
17+
</Style>
18+
19+
<ControlTemplate x:Key="Default" TargetType="{x:Type DataGridCell}">
20+
<StackPanel Background="White">
21+
<GridViewRowPresenter Content="{TemplateBinding Content}"
22+
Columns="{TemplateBinding GridView.ColumnCollection}"/>
23+
</StackPanel>
24+
</ControlTemplate>
25+
26+
<ControlTemplate x:Key="NonPrintableSheet" TargetType='{x:Type DataGridCell}'>
27+
<StackPanel Background="#f6f6f6">
28+
<GridViewRowPresenter Content="{TemplateBinding Content}"
29+
Columns="{TemplateBinding GridView.ColumnCollection}"/>
30+
</StackPanel>
31+
</ControlTemplate>
32+
33+
</Window.Resources>
34+
<DockPanel Margin="10">
35+
<StackPanel DockPanel.Dock="Top">
36+
<TextBlock Text="Select Order Parameter:" />
37+
<ComboBox x:Name="orderparams_cb" Height="22" Margin="0,5,0,0" SelectionChanged="selection_changed"/>
38+
<TextBlock TextWrapping="WrapWithOverflow" Margin="0,5,0,10">
39+
List of the sheets (Drag to manually reorder):
40+
</TextBlock>
41+
</StackPanel>
42+
<Grid DockPanel.Dock="Bottom" Margin="0,10,0,0">
43+
<Grid.RowDefinitions>
44+
<RowDefinition Height="Auto" />
45+
</Grid.RowDefinitions>
46+
<Grid.ColumnDefinitions>
47+
<ColumnDefinition Width="*" />
48+
<ColumnDefinition Width="*" />
49+
<ColumnDefinition Width="*" />
50+
</Grid.ColumnDefinitions>
51+
<Button x:Name="reorder_b"
52+
Margin="5,0,0,0"
53+
Grid.Column="2" Grid.Row="0"
54+
Height="25"
55+
Content="Re-Order"
56+
Click="reorder_items"/>
57+
</Grid>
58+
<Grid DockPanel.Dock="Left" Width="30" Margin="0,0,10,0">
59+
<Grid.RowDefinitions>
60+
<RowDefinition />
61+
<RowDefinition />
62+
<RowDefinition />
63+
<RowDefinition />
64+
<RowDefinition />
65+
<RowDefinition />
66+
</Grid.RowDefinitions>
67+
<Button Grid.Row="0" Margin="0,0,0,5" Content="&gt;&gt;&gt; Top" Click="move_to_top">
68+
<Button.LayoutTransform>
69+
<RotateTransform Angle="-90" />
70+
</Button.LayoutTransform>
71+
</Button>
72+
<Button Grid.Row="1" Margin="0,0,0,5" Content="10 &gt;&gt;" Click="move_10_to_top">
73+
<Button.LayoutTransform>
74+
<RotateTransform Angle="-90" />
75+
</Button.LayoutTransform>
76+
</Button>
77+
<Button Grid.Row="2" Margin="0,0,0,5" Content="&gt;" Click="move_1_to_top">
78+
<Button.LayoutTransform>
79+
<RotateTransform Angle="-90" />
80+
</Button.LayoutTransform>
81+
</Button>
82+
<Button Grid.Row="3" Margin="0,0,0,5" Content="&lt;" Click="move_1_to_bottom">
83+
<Button.LayoutTransform>
84+
<RotateTransform Angle="-90" />
85+
</Button.LayoutTransform>
86+
</Button>
87+
<Button Grid.Row="4" Margin="0,0,0,5" Content="10 &lt;&lt;" Click="move_10_to_bottom">
88+
<Button.LayoutTransform>
89+
<RotateTransform Angle="-90" />
90+
</Button.LayoutTransform>
91+
</Button>
92+
<Button Grid.Row="5" Margin="0,0,0,0" Content="Bottom &lt;&lt;&lt;" Click="move_to_bottom">
93+
<Button.LayoutTransform>
94+
<RotateTransform Angle="-90" />
95+
</Button.LayoutTransform>
96+
</Button>
97+
</Grid>
98+
<DataGrid x:Name="items_dg"
99+
AutoGenerateColumns="False"
100+
BorderThickness="1"
101+
RowHeaderWidth="0"
102+
CanUserSortColumns="True"
103+
HorizontalGridLinesBrush="#dedede"
104+
VerticalGridLinesBrush="#dedede"
105+
Sorting="sorting_changed">
106+
<DataGrid.CellStyle>
107+
<Style TargetType="DataGridCell" >
108+
<Setter Property="BorderThickness" Value="0"/>
109+
</Style>
110+
</DataGrid.CellStyle>
111+
<DataGrid.Columns>
112+
<DataGridTextColumn Header="Index" Binding="{Binding order_index}" MinWidth="40" Width="40" IsReadOnly="True" CellStyle="{StaticResource IndexColumnStyle}"/>
113+
<DataGridTextColumn Header="Sheet Number" Binding="{Binding number}" MinWidth="100" Width="100" IsReadOnly="True" CellStyle="{StaticResource DefaultColumnStyle}"/>
114+
<DataGridTextColumn Header="Sheet Name" Binding="{Binding name}" MinWidth="50" Width="*" IsReadOnly="True" CellStyle="{StaticResource DefaultColumnStyle}"/>
115+
</DataGrid.Columns>
116+
</DataGrid>
117+
</DockPanel>
118+
</Window>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
"""Print items in order from a sheet index."""
2+
#pylint: disable=W0613,E0401,C0103
3+
from pyrevit import forms
4+
from pyrevit import revit, DB
5+
from pyrevit import script
6+
7+
8+
logger = script.get_logger()
9+
10+
11+
class ListItem(object):
12+
def __init__(self, view_sheet):
13+
self._item = view_sheet
14+
self.name = self._item.Name
15+
self.number = self._item.SheetNumber
16+
self.printable = self._item.CanBePrinted
17+
self.order_index = 0
18+
19+
@property
20+
def revit_item(self):
21+
return self._item
22+
23+
24+
class ReOrderWindow(forms.WPFWindow):
25+
def __init__(self, xaml_file_name):
26+
forms.WPFWindow.__init__(self, xaml_file_name)
27+
28+
self._setup_item_params_combobox()
29+
30+
@property
31+
def items_list(self):
32+
return self.items_dg.ItemsSource
33+
34+
@items_list.setter
35+
def items_list(self, value):
36+
self.items_dg.ItemsSource = value
37+
# update oder indices
38+
self._update_order_indices()
39+
40+
@property
41+
def selected_item_param(self):
42+
return self.orderparams_cb.SelectedItem
43+
44+
def _update_order_indices(self):
45+
for idx, item in enumerate(self.items_list):
46+
item.order_index = idx
47+
48+
def _setup_item_params_combobox(self):
49+
items = revit.query.get_sheets()
50+
if items:
51+
item_sample = items[0]
52+
item_params = [x.Definition.Name for x in item_sample.Parameters
53+
if x.StorageType == DB.StorageType.Integer]
54+
order_params = [x for x in item_params if 'order' in x.lower()]
55+
self.orderparams_cb.ItemsSource = sorted(order_params)
56+
self.orderparams_cb.SelectedIndex = 0
57+
58+
def _get_ordered_items(self):
59+
items = revit.query.get_sheets(include_noappear=False)
60+
if self.selected_item_param:
61+
items = sorted(
62+
items,
63+
key=lambda x: x.LookupParameter(self.selected_item_param)
64+
.AsInteger()
65+
)
66+
return items
67+
68+
def _get_selected_nonselected(self):
69+
selected = list(self.items_dg.SelectedItems)
70+
nonselected = []
71+
for item in self.items_list:
72+
if item not in selected:
73+
nonselected.append(item)
74+
return selected, nonselected
75+
76+
def _insert_list_in_list(self, src_list, dest_list, index):
77+
max_index = len(dest_list)
78+
if index < 0:
79+
index = 0
80+
81+
if index > max_index:
82+
index = max_index
83+
84+
for item in reversed(src_list):
85+
dest_list.insert(index, item)
86+
87+
return dest_list
88+
89+
def selection_changed(self, sender, args):
90+
if self.selected_item_param:
91+
items_list = [ListItem(x) for x in self._get_ordered_items()]
92+
# Show all items
93+
self.items_list = items_list
94+
95+
def sorting_changed(self, sender, args):
96+
order_param = args.Column.SortMemberPath
97+
if order_param == 'number':
98+
self.items_list = sorted(self.items_list, key=lambda x: x.number)
99+
elif order_param == 'name':
100+
self.items_list = sorted(self.items_list, key=lambda x: x.name)
101+
102+
def move_to_top(self, sender, args):
103+
selected, non_selected = self._get_selected_nonselected()
104+
new_list = self._insert_list_in_list(selected, non_selected, 0)
105+
self.items_list = new_list
106+
107+
def move_10_to_top(self, sender, args):
108+
selected, non_selected = self._get_selected_nonselected()
109+
index = self.items_dg.ItemsSource.index(selected[0])
110+
new_list = self._insert_list_in_list(selected, non_selected, index - 10)
111+
self.items_list = new_list
112+
113+
def move_1_to_top(self, sender, args):
114+
selected, non_selected = self._get_selected_nonselected()
115+
index = self.items_dg.ItemsSource.index(selected[0])
116+
new_list = self._insert_list_in_list(selected, non_selected, index - 1)
117+
self.items_list = new_list
118+
119+
def move_1_to_bottom(self, sender, args):
120+
selected, non_selected = self._get_selected_nonselected()
121+
index = self.items_dg.ItemsSource.index(selected[0])
122+
new_list = self._insert_list_in_list(selected, non_selected, index + 1)
123+
self.items_list = new_list
124+
125+
def move_10_to_bottom(self, sender, args):
126+
selected, non_selected = self._get_selected_nonselected()
127+
index = self.items_dg.ItemsSource.index(selected[0])
128+
new_list = self._insert_list_in_list(selected, non_selected, index + 10)
129+
self.items_list = new_list
130+
131+
def move_to_bottom(self, sender, args):
132+
selected, non_selected = self._get_selected_nonselected()
133+
new_list = self._insert_list_in_list(selected,
134+
non_selected,
135+
len(non_selected))
136+
self.items_list = new_list
137+
138+
def reorder_items(self, sender, args):
139+
self.Close()
140+
with revit.Transaction('Reorder Sheets'):
141+
for item in self.items_list:
142+
idx_param = \
143+
item.revit_item.LookupParameter(self.selected_item_param)
144+
if idx_param:
145+
idx_param.Set(item.order_index)
146+
147+
148+
ReOrderWindow('ReOrderWindow.xaml').ShowDialog()

extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/_layout

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ Set Crop Region To Selected Shape
1212
Open Selected Viewport
1313
View Ordering Tool
1414
-----
15+
ReOrder Sheets
1516
Decrement Selected Sheet Numbers
1617
Increment Selected Sheet Numbers

extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack3/Edit.pulldown/Place Origin Marker.pushbutton/script.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
# place lines on active view
1616
try:
1717
with revit.Transaction('Place Origin Marker', log_errors=False):
18-
revit.doc.Create.NewDetailCurve(revit.activeview, line1)
19-
revit.doc.Create.NewDetailCurve(revit.activeview, line2)
18+
if revit.doc.IsFamilyDocument:
19+
revit.doc.FamilyCreate.NewDetailCurve(revit.activeview, line1)
20+
revit.doc.FamilyCreate.NewDetailCurve(revit.activeview, line2)
21+
else:
22+
revit.doc.Create.NewDetailCurve(revit.activeview, line1)
23+
revit.doc.Create.NewDetailCurve(revit.activeview, line2)
2024
except Exception as ex:
2125
forms.alert("You are not on a plan view.", sub_msg=str(ex))

extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack3/Select.pulldown/Select Element Types.pushbutton/script.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
all_options = list(element_types)
2424
all_options.extend(graphic_styles)
25-
all_options.extend(['Fill Patterns'])
25+
all_options.extend(['Fill Patterns', 'Area Schemes'])
2626
selected_option = \
2727
forms.CommandSwitchWindow.show(all_options,
2828
message='Pick type category:')
@@ -33,6 +33,10 @@
3333
fill_patterns = revit.query.get_types_by_class(DB.FillPatternElement,
3434
doc=revit.doc)
3535
selection.set_to(list(fill_patterns))
36+
if selected_option == 'Area Schemes':
37+
area_schemes = revit.query.get_types_by_class(DB.AreaScheme,
38+
doc=revit.doc)
39+
selection.set_to(list(area_schemes))
3640
elif selected_option.startswith('Graphics Styles: '):
3741
graphic_style_cat = selected_option.replace('Graphics Styles: ', '')
3842
graphic_styles = \

0 commit comments

Comments
 (0)