Ver código fonte

mxg:修改复制参数设置

mengxiangge 6 anos atrás
pai
commit
63845081c1

BIN
MBI/SAGA.MBI/Image/delete.png


+ 3 - 0
MBI/SAGA.MBI/SAGA.MBI.csproj

@@ -1085,6 +1085,9 @@
   </ItemGroup>
   <ItemGroup>
     <Content Include="FodyWeavers.xml" />
+    <Resource Include="Image\delete.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
     <Content Include="sagacloud.ico" />
     <Resource Include="Image\correlation.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>

+ 38 - 14
MBI/SAGA.MBI/Test/CopyParameterValue.cs

@@ -6,6 +6,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.IO;
 using System.Linq;
 using Autodesk.Revit.DB;
@@ -35,10 +36,15 @@ namespace SAGA.MBI.Test
     /// </summary>
     public class CopyParameterValue : IDataCorrect
     {
-        private Dictionary<string, string> m_parameterDic;
-        public void SetCopyParameterDic(Dictionary<string, string> dic)
+        public static string AllStr = "All";
+        private ObservableCollection<PropertyItem> m_parameterDic;
+        private string m_copyFamilyRange;
+        public bool SetCopyParameterDic(ObservableCollection<PropertyItem> dic, string copyRange)
         {
+
             m_parameterDic = dic;
+            m_copyFamilyRange = copyRange;
+            return (dic == null || m_copyFamilyRange == null);
         }
 
         public string Execute(MFloor floor)
@@ -71,26 +77,44 @@ namespace SAGA.MBI.Test
 
         private void OperateFloor(Document doc)
         {
+
             using (Transaction trans = new Transaction(doc, "复制属性"))
             {
-                trans.Start();
-                var elements = doc.GetMbiElements();
-                foreach (Element element in elements)
+                try
                 {
-                    if (element.GetFamilyCode() == "GMMP")
-                        foreach (var pair in m_parameterDic)
-                        {
-                            string origin = pair.Key;
-                            string target = pair.Value;
-                            if (origin.IsNotNullEmpty() && target.IsNotNullEmpty())
+                    trans.Start();
+                    var elements = doc.GetMbiElements();
+                    var codes = GetCodes();
+
+                    foreach (Element element in elements)
+                    {
+                        var code = element.GetFamilyCode();
+                        if (codes.Contains(AllStr) || code.Contains(code))
+                            foreach (var pair in m_parameterDic)
                             {
-                                element.SetParameterValue(target, element.GetParameterString(origin));
+                                string origin = pair.Name;
+                                string target = pair.Value;
+                                if (origin.IsNotNullEmpty() && target.IsNotNullEmpty())
+                                {
+                                    element.SetParameterValue(target, element.GetParameterString(origin));
+                                }
                             }
-                        }
+                    }
+
+                    trans.Commit();
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine(e);
                 }
 
-                trans.Commit();
             }
         }
+
+        private string[] GetCodes()
+        {
+            var codes = m_copyFamilyRange?.Split(';', ';');
+            return codes;
+        }
     }
 }

+ 54 - 5
MBI/SAGA.MBI/Test/WinParameterDic.xaml

@@ -5,27 +5,58 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:SAGA.MBI.Test"
              mc:Ignorable="d" Title="配置参数" WindowStartupLocation="CenterScreen"
-             Height="300" Width="400">
+                  Height="300" Width="400">
     <Window.Resources>
         <Style  TargetType="TextBox">
             <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
             <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
             <Setter Property="Height" Value="24"></Setter>
         </Style>
+        <Style TargetType="DataGridColumnHeader">
+            <Setter Property="Height" Value="25"></Setter>
+            <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
+            <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+        </Style>
+        <Style x:Key="dgtextblock">
+            <Setter Property="TextBlock.Height" Value="25"></Setter>
+            <Setter Property="TextBlock.HorizontalAlignment" Value="Center"></Setter>
+        </Style>
+        <Style x:Key="dgtextbox">
+            <Setter Property="TextBox.Height" Value="25"></Setter>
+            <Setter Property="TextBox.HorizontalContentAlignment" Value="Center"></Setter>
+        </Style>
     </Window.Resources>
     <Grid Margin="5">
         <Grid.RowDefinitions>
-            <RowDefinition Height="20"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
             <RowDefinition></RowDefinition>
             <RowDefinition Height="50"></RowDefinition>
         </Grid.RowDefinitions>
+        <Grid Grid.Row="0">
+            <WrapPanel>
+                <Label Content="请输入设备类别(族的四位编码,多个请用分号分割,所有请输入All):"></Label>
+                <TextBox Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid }, Path=ActualWidth}" Text="{Binding Path=CopyRange,UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Left" ></TextBox>
+            </WrapPanel>
+        </Grid>
         <Grid Grid.Row="1">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition></ColumnDefinition>
                 <ColumnDefinition></ColumnDefinition>
-                <ColumnDefinition Width="30"></ColumnDefinition>
+                <ColumnDefinition Width="20"></ColumnDefinition>
             </Grid.ColumnDefinitions>
-            <StackPanel Grid.Column="0">
+            <DataGrid Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding Path=ParameterDic,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" CanUserAddRows="False"
+                      SelectedItem="{Binding Path=SelectItem}">
+                <DataGrid.Columns>
+                    <DataGridTextColumn Header="源参数名称(旧)"  Width="*" Binding="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}"
+                                       ElementStyle="{StaticResource dgtextblock}" 
+                                        EditingElementStyle="{StaticResource dgtextbox}"></DataGridTextColumn>
+                    <DataGridTextColumn Header="目标参数名称(新)" Width="*" Binding="{Binding Path=Value,UpdateSourceTrigger=PropertyChanged}"
+                                        ElementStyle="{StaticResource dgtextblock}"
+                                        EditingElementStyle="{StaticResource dgtextbox}"></DataGridTextColumn>
+                </DataGrid.Columns>
+            </DataGrid>
+
+            <!--<StackPanel Grid.Column="0">
                 <Label Height="25" Content="源参数名称(旧)" HorizontalContentAlignment="Center" Background="LightGray"></Label>
                 <TextBox Name="txt00" Text="车位编号"></TextBox>
                 <TextBox Name="txt10"></TextBox>
@@ -34,7 +65,24 @@
                 <Label Height="25" Content="目标参数名称(新)" HorizontalContentAlignment="Center" Background="LightGray"></Label>
                 <TextBox  Name="txt01" Text="设备本地编码"></TextBox>
                 <TextBox  Name="txt11"></TextBox>
-            </StackPanel>
+            </StackPanel>-->
+            <Grid Grid.Column="2">
+                <StackPanel VerticalAlignment="Center">
+                    <Button Margin="0,5"
+                        Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid},Path=ActualWidth}"
+                            Click="BtnAdd_OnClick">
+                        <Image Source="../Image/add.png"></Image>
+                    </Button>
+
+                    <Button Margin="0,5"
+                        Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid},Path=ActualWidth}"
+                            Click="BtnDel_OnClick">
+                        <Image Source="../Image/delete.png">
+                        </Image>
+                    </Button>
+
+                </StackPanel>
+            </Grid>
         </Grid>
         <WrapPanel Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center">
             <Button Height="24" Width="100" Content="执行" Margin="10,0" IsDefault="True" Click="ButtonBase_OnClick"></Button>
@@ -42,3 +90,4 @@
         </WrapPanel>
     </Grid>
 </Window>
+

+ 81 - 6
MBI/SAGA.MBI/Test/WinParameterDic.xaml.cs

@@ -1,5 +1,7 @@
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -19,27 +21,100 @@ namespace SAGA.MBI.Test
     /// <summary>
     /// WinParameterDic.xaml 的交互逻辑
     /// </summary>
-    public partial class WinParameterDic
+    public partial class WinParameterDic : INotifyPropertyChanged
     {
         public WinParameterDic()
         {
             InitializeComponent();
+            CopyRange = CopyParameterValue.AllStr;
+            ParameterDic = new ObservableCollection<PropertyItem>();
+            ParameterDic.Add(new PropertyItem() { Name = "车位编号", Value = "设备本地编码" });
+            this.DataContext = this;
         }
-        public Dictionary<string,string> ParameterDic { get; set; }
+
+        #region Binding
+
+        private ObservableCollection<PropertyItem> m_ParameterDic;
+
+        public ObservableCollection<PropertyItem> ParameterDic
+        {
+            get { return m_ParameterDic; }
+            set
+            {
+                m_ParameterDic = value;
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ParameterDic)));
+            }
+        }
+
+        private PropertyItem m_SelectItem;
+
+        public PropertyItem SelectItem
+        {
+            get { return m_SelectItem; }
+            set
+            {
+                m_SelectItem = value;
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectItem)));
+            }
+        }
+
+        private string m_CopyRange;
+
+        public string CopyRange
+        {
+            get { return m_CopyRange; }
+            set
+            {
+                m_CopyRange = value;
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CopyRange)));
+            }
+        }
+
+
+        #endregion
+
+
+        public event PropertyChangedEventHandler PropertyChanged;
+
         private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
         {
-            ParameterDic=new System.Collections.Generic.Dictionary<string, string>();
             try
             {
-                ParameterDic.Add(txt00.Text,txt01.Text);
-                ParameterDic.Add(txt10.Text,txt11.Text);
+
             }
             catch (Exception exception)
             {
                 Console.WriteLine(exception);
-                
+
             }
+
             this.DialogResult = true;
         }
+
+
+        private void BtnAdd_OnClick(object sender, RoutedEventArgs e)
+        {
+            var item = ParameterDic.FirstOrDefault(t => t.Name == null && t.Value == null);
+            if (item == null)
+            {
+                item = new PropertyItem();
+                ParameterDic.Add(item);
+            }
+
+            SelectItem = item;
+        }
+
+        private void BtnDel_OnClick(object sender, RoutedEventArgs e)
+        {
+            if (SelectItem != null)
+                ParameterDic.Remove(SelectItem);
+        }
+    }
+
+    public class PropertyItem
+    {
+        public string Name { get; set; }
+
+        public string Value { get; set; }
     }
 }

+ 2 - 1
MBI/SAGA.MBI/ToolCommand.cs

@@ -284,7 +284,8 @@ namespace SAGA.MBI
 
                     if (win.ShowDialog() == true)
                     {
-                        SingleInstance<CopyParameterValue>.Instance.SetCopyParameterDic(win.ParameterDic);
+                        if (!SingleInstance<CopyParameterValue>.Instance.SetCopyParameterDic(win.ParameterDic,
+                            win.CopyRange)) return Result.Cancelled;
                         switch (tip)
                         {
                             case DialogResult.Yes: