using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Nice3point.Revit.Toolkit.External.Handlers; using System.ComponentModel; using System.Linq; using System.Windows; using System.Windows.Data; namespace Szmedi.RvKits.FamilyTools { /// /// PreviewFam.xaml 的交互逻辑 /// public partial class PreviewFam { private readonly Document doc; private readonly UIDocument uidoc; private readonly Document famdoc; private readonly ActionEventHandler handler; public PreviewFam() { InitializeComponent(); } public PreviewFam(Autodesk.Revit.ApplicationServices.Application app, UIDocument uidoc, string filepath, ActionEventHandler handler) { InitializeComponent(); this.handler = handler; Autodesk.Revit.ApplicationServices.Application application = app; famdoc = application.OpenDocumentFile(filepath); this.uidoc = uidoc; this.doc = uidoc.Document; //doc = uiapp.ActiveUIDocument.doc; FilteredElementCollector collector = new FilteredElementCollector(famdoc).OfClass(typeof(View3D)); //IEnumerable secs = from Element f in collecotr where (f as View3D).CanBePrinted == true select (f as View); View3D v3d = collector.FirstOrDefault() as View3D; handler.Raise( _ => { using (Transaction trans = new(famdoc)) { trans.Start("修改显示"); v3d.DetailLevel = ViewDetailLevel.Fine; v3d.DisplayStyle = DisplayStyle.RealisticWithEdges; trans.Commit(); } }); PreviewControl pre = new(famdoc, v3d.Id); grid.Children.Add(pre); ParaViewModel vm = new(famdoc); CbbFamType.DataContext = vm; } private void CbbFamType_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { if (CbbFamType.SelectedItem != null) { FamilyType ft = ((KeyValuePair)CbbFamType.SelectedItem).Value; System.Collections.ObjectModel.ObservableCollection paras = new ParaViewModel(famdoc, ft).Parameters; ParasDG.ItemsSource = paras; ICollectionView vw = CollectionViewSource.GetDefaultView(paras); //分组 vw.GroupDescriptions.Add(new PropertyGroupDescription("Group")); //注意这行代码,设置视图的区域性信息为当前区域性对象 vw.Culture = System.Globalization.CultureInfo.CurrentCulture; //排序 vw.SortDescriptions.Add(new SortDescription("Group", ListSortDirection.Ascending)); handler.Raise( _ => { using Transaction trans = new(famdoc); trans.Start("修改类型"); famdoc.FamilyManager.CurrentType = ft; trans.Commit(); }); } } private void LoadFam_Click(object sender, RoutedEventArgs e) { try { handler.Raise( _ => { using Transaction trans = new(doc); trans.Start("加载族" + "-" + Path.GetFileNameWithoutExtension(famdoc.PathName)); doc.LoadFamily(famdoc.PathName, out var family); trans.Commit(); Close(); var fs = family.GetFamilySymbolIds().Select(id => doc.GetElement(id) as FamilySymbol).FirstOrDefault(); if (fs != null) { uidoc.PromptForFamilyInstancePlacement(fs); } }); } catch (System.Exception) { throw; } } private void Window_Closed(object sender, System.EventArgs e) { famdoc.Close(false); } //private ObservableCollection GetParameters(FamilyType ft) //{ // ObservableCollection parameters = new ObservableCollection(); // //FamilyTypeSet types = famdoc.FamilyManager.Types; // //var familytype = from FamilyType t in types // // where t.Name == ft // // select t; // var paras = new ParaViewModel(, ft).Parameters; // return parameters; //} } }