using System.Data; using System.Linq; using System.Windows; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Microsoft.Win32; using Newtonsoft.Json; using Nice3point.Revit.Toolkit.External; using Szmedi.RvKits.ExportFamilyInfo; namespace Szmedi.RvKits.FamilyTools { [Transaction(TransactionMode.Manual)] public class ComponentInfoCmd : ExternalCommand { public override void Execute() { //AssemblyLoaderHelpers loader = new(GlobalVariables.DirAssembly); ExportSettingsWin settings = null; settings = new ExportSettingsWin(); settings.ShowDialog(); //loader.HookAssemblyResolve(); //try //{ //} //catch (Exception ex) //{ // LogAssists.WriteLog(ex.Message); // Result = Result.Failed; //} //finally //{ // loader.UnhookAssemblyResolve(); //} if (settings.DialogResult != true) { Result = Result.Cancelled; return; } OpenFileDialog openFileDialog = new() { Filter = "���ļ�(*.rfa)|*.rfa", Multiselect = true }; var savepath = Properties.Settings.Default.SavePath; //Autodesk.Revit.UI.FileOpenDialog fileOpenDialog = new FileOpenDialog("���ļ�(*.rfa)|*.rfa"); //fileOpenDialog.Show(); //fileOpenDialog.GetSelectedModelPath(); if (openFileDialog.ShowDialog() == true) { foreach (var filename in openFileDialog.FileNames) { var famdoc = Application.OpenDocumentFile(filename); var dictJson = DictParas(famdoc); try { DictionaryToJson(filename, dictJson, savepath); } catch (Exception ex) { LogAssists.WriteLog(ex.Message); } ExportThumbnail(savepath, filename, famdoc); famdoc.Close(false); var famFullPath = Path.Combine(savepath, Path.GetFileNameWithoutExtension(filename), Path.GetFileName(filename)); //DirectoryInfo FamDir = new DirectoryInfo(FamPath); //if (!FamDir.Exists) //{ // FamDir.Create(); //} //File.Move(fullPath, FamFullPath); FileInfo file = new(famFullPath); if (file.Exists) { file.Delete(); } File.Copy(filename, famFullPath); } } } private DataTable DtParasToExcel(Document doc, FamilyManager fm) //��ȡ���ļ����� { //StringBuilder sb = new StringBuilder();//�õ����е�ö������ //sb.Append(famdoc.Title + "\r\n"); var ft = fm.CurrentType; //��ȡ��ǰ���� DataTable dt = new(); //dt.Columns.Add("������", typeof(string)); dt.Columns.Add("����", typeof(string)); dt.Columns.Add("����ֵ", typeof(string)); dt.Columns.Add("��ʽ", typeof(string)); if (ft == null) { //IList faparas = fm.GetParameters(); //foreach (var para in faparas) //{ // sb.Append(para.Definition.Name); //} using Transaction trans = new(doc); trans.Start("�½�������"); var NT = "NewType"; ft = fm.NewType(NT); trans.Commit(); } List pgs = []; foreach (FamilyParameter para in fm.Parameters) { if (!pgs.Contains(para.Definition.ParameterGroup)) { pgs.Add(para.Definition.ParameterGroup); } } foreach (var pg in pgs) { var drpg = dt.NewRow(); drpg[0] = null; drpg[1] = LabelUtils.GetLabelFor(pg); drpg[2] = null; dt.Rows.Add(drpg); foreach (FamilyParameter para in fm.Parameters) { if (para.Definition.ParameterGroup == pg) { var drpara = dt.NewRow(); drpara[0] = para.Definition.Name; drpara[1] = ft.AsValueString(para); drpara[2] = para.Formula; dt.Rows.Add(drpara); } } } return dt; //foreach (FamilyParameter para in fm.Parameters) //{ // DataRow dr = dt.NewRow(); // dr[0] = LabelUtils.GetLabelFor(para.Definition.ParameterGroup); // dr[1] = para.Definition.Name; // dr[2] = ft.AsValueString(para); // dt.Rows.Add(dr); // //sb.Append(para.Definition.ParameterGroup + ":" + para.Definition.Name + ":" + ft.AsValueString(para) + "\r\n"); // //switch (para.StorageType) // //{ // // case StorageType.Double: // // sb.Append(para.Definition.Name + ":" + ft.AsDouble(para) * 304.8 + "\r\n"); // // break; // // case StorageType.Integer: // // sb.Append(para.Definition.Name + ":" + ft.AsInteger(para) * 304.8 + "\r\n"); // // break; // // case StorageType.ElementId: // // sb.Append(para.Definition.Name + ":" + ft.AsElementId(para) + "\r\n"); // // break; // // case StorageType.String: // // sb.Append(para.Definition.Name + ":" + ft.AsString(para) + "\r\n"); // // break; // // case StorageType.None: // // break; // //} //} //TaskDialog.Show(header, sb.ToString()); } private DataTable DtParasToJson(Document doc) //��ȡ���ļ����� { //StringBuilder sb = new StringBuilder();//�õ����е�ö������ //sb.Append(famdoc.Title + "\r\n"); var fm = doc.FamilyManager; var ft = fm.CurrentType; //��ȡ��ǰ���� DataTable dt = new(); dt.Columns.Add("������", typeof(string)); dt.Columns.Add("����", typeof(string)); dt.Columns.Add("����ֵ", typeof(string)); dt.Columns.Add("��ʽ", typeof(string)); if (ft == null) { //IList faparas = fm.GetParameters(); //foreach (var para in faparas) //{ // sb.Append(para.Definition.Name); //} using Transaction trans = new(doc); trans.Start("�½�������"); var NT = "NewType"; ft = fm.NewType(NT); trans.Commit(); } List pgs = []; foreach (FamilyParameter para in fm.Parameters) { if (!pgs.Contains(para.Definition.ParameterGroup)) { pgs.Add(para.Definition.ParameterGroup); } } foreach (var pg in pgs) { foreach (FamilyParameter para in fm.Parameters) { if (para.Definition.ParameterGroup == pg) { var drpara = dt.NewRow(); drpara[0] = LabelUtils.GetLabelFor(pg); drpara[1] = para.Definition.Name; drpara[2] = ft.AsValueString(para); drpara[3] = para.Formula; dt.Rows.Add(drpara); } } } return dt; } /// /// ��ȡתJson�IJ������� /// /// /// private Dictionary> DictParas(Document doc) { var fm = doc.FamilyManager; var ft = fm.CurrentType; //��ȡ��ǰ���� //���飬dir<����������������> Dictionary> paragroups = []; using Transaction trans = new(doc); trans.Start("�½�������"); ft ??= fm.NewType("NewType"); List pgs = []; foreach (FamilyParameter para in fm.Parameters) { if (!pgs.Contains(para.Definition.ParameterGroup)) { pgs.Add(para.Definition.ParameterGroup); } } foreach (var pg in pgs) { Dictionary paras = []; foreach (FamilyParameter para in fm.Parameters) { if (para.Definition.ParameterGroup == pg) { JsonPara JP = new() { Value = ft.AsValueString(para), Formula = para.Formula }; paras.Add(para.Definition.Name, JP); //drpara[0] = para.Definition.Name; //drpara[1] = ft.AsValueString(para); //drpara[2] = para.Formula; } } paragroups.Add(LabelUtils.GetLabelFor(pg), paras); } trans.RollBack(); return paragroups; } private void DictionaryToJson(string fullName, Dictionary> dicts, string DirChoosed) { //string filename = ""; //try //{ // FileInfo file = new FileInfo(filename); // string json = File.ReadAllText("config.json"); // dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json); // //jsonObj["L_BPointMoveDelay"] = LBPointdelay.ToString(); // string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented); // File.WriteAllText("config.json", output); //} //catch (Exception) //{ // throw; //} //string serverAppPath = Request.PhysicalApplicationPath.ToString(); //��ȡ�ļ�����������·������չ���� var safefilename = Path.GetFileNameWithoutExtension(fullName); //��������չ�����ļ�����·��+�ļ��� //string JosnWithoutEx = DirChoosed + "\\" + safefilename + "\\" + safefilename + "-" + "������"; //���ļ���������Ŀ¼���ļ�����Ŀ¼�� var fileDir = Path.Combine(DirChoosed, safefilename); //�����ļ�������·���� var file_fullpath = Path.Combine(DirChoosed, safefilename, $"{safefilename}.json"); if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } if (!File.Exists(file_fullpath)) { //File.Create(file_fullpath); var JsonString = JsonConvert.SerializeObject(dicts); File.WriteAllText(file_fullpath, JsonString); } //��ģ������д���ļ� //using (StreamWriter sw = new StreamWriter(file_fullpath)) //{ // JsonSerializer serializer = new JsonSerializer(); // serializer.Converters.Add(new JavaScriptDateTimeConverter()); // serializer.NullValueHandling = NullValueHandling.Ignore; // //����Json.net��д���� // JsonWriter writer = new JsonTextWriter(sw); // //��ģ���������л���д��Json.net��JsonWriter���� // serializer.Serialize(writer, lot); // //ser.Serialize(writer, ht); // writer.Close(); // sw.Close(); //} } /// /// ������ѡ�� /// /// /// /// /// /// private void ExportOption(string saveDirChoosed, string filesFullPathChoosed, Document famodc, IList views, XYZ forward) { var Imapath = Path.Combine(saveDirChoosed, Path.GetFileNameWithoutExtension(filesFullPathChoosed)); var format = Properties.Settings.Default.ImgFormat; if (!Directory.Exists(Imapath)) { Directory.CreateDirectory(Imapath); } ImageExportOptions options = new() { FilePath = Path.Combine(Imapath, $"{forward}"), FitDirection = FitDirectionType.Horizontal, HLRandWFViewsFileType = (ImageFileType)Enum.Parse(typeof(ImageFileType), format), //HLRandWFViewsFileType = ImageFileType.JPEGLossless, //ShadowViewsFileType = (ImageFileType)Enum.Parse(typeof(ImageFileType), format), ExportRange = ExportRange.SetOfViews, ImageResolution = ImageResolution.DPI_600, //ShouldCreateWebSite = false, ZoomType = ZoomFitType.FitToPage, PixelSize = int.Parse(Properties.Settings.Default.ImgSize) }; //if (views.Count > 0) //{ // options.SetViewsAndSheets(views); // options.ExportRange = ExportRange.SetOfViews; //} //else //{ // options.ExportRange = ExportRange // .VisibleRegionOfCurrentView; //} options.SetViewsAndSheets(views); famodc.ExportImage(options); } private void ExportThumbnail(string saveDirChoosed, string filesFullPathChoosed, Document famdoc) { IList views = []; //FilteredElementCollector concol = new FilteredElementCollector(famdoc).QueryElementsByType(typeof(ConnectorElement)).OfCategory(BuiltInCategory.OST_ConnectorElem); //FilteredElementCollector dimcol = new FilteredElementCollector(famdoc).QueryElementsByType(typeof(Dimension)).OfCategory(BuiltInCategory.OST_Dimensions); var v3d = new FilteredElementCollector(famdoc) .OfClass(typeof(View)) .OfCategory(BuiltInCategory.OST_Views) .OfType() .FirstOrDefault(x => x.ViewType == ViewType.ThreeD); //ElementClassFilter dimcf = new ElementClassFilter(typeof(Dimension)); //ElementClassFilter ardimcf = new ElementClassFilter(typeof(AngularDimension)); //LogicalOrFilter orFilter = new LogicalOrFilter(dimcf, ardimcf); // FilteredElementCollector dimcol = new FilteredElementCollector(famdoc).WherePasses(orFilter); //var viewFamilyType = new FilteredElementCollector(famdoc).QueryElementsByType(typeof(ViewFamilyType)).OfType().LastOrDefault(x => x.ViewFamily == ViewFamily.ThreeDimensional); //var viewFamilyTypes = new FilteredElementCollector(famdoc).QueryElementsByType(typeof(ViewFamilyType)).OfType().GetEnumerator(); //var direction = new XYZ(-1, 1, -1); using Transaction trans = new(famdoc, "ExportImage"); trans.Start(); //XYZ eyep1 = new XYZ(1.66983442269142, -1.62882392400378, 6.75513625996179); //XYZ forwarddir1 = new XYZ(0.577350269189626, 0.577350269189626, -0.577350269189626); //XYZ updir1 = new XYZ(0.408248290463863, 0.408248290463863, 0.816496580927726); //ViewOrientation3D isometric1 = new ViewOrientation3D(eyep1, forwarddir1, updir1); //XYZ eyep2 = new XYZ(6.66133814775094E-15, 2.22788354954364, 4.88410451942765); //XYZ forwarddir2 = new XYZ(0, -1, 0); //XYZ updir2 = new XYZ(0, 0, 1); //ViewOrientation3D isometric2 = new ViewOrientation3D(eyep2, forwarddir2, updir2); //var coord = v3d.GetOrientation(); var graphicDisplayOptions = v3d.get_Parameter(BuiltInParameter.MODEL_GRAPHICS_STYLE); graphicDisplayOptions.Set(8); var elemIds = new FilteredElementCollector(famdoc) .OfClass(typeof(ConnectorElement)).ToElementIds(); var elemIds1 = new FilteredElementCollector(famdoc) .OfCategory(BuiltInCategory.OST_Dimensions).ToElementIds(); v3d.HideElements(elemIds); v3d.HideElements(elemIds1); //ģ����ʾΪ������� //Options op = new Options(); //op.DetailLevel = ViewDetailLevel.Fine; //op.View.DisplayStyle = DisplayStyle.Realistic; //famdoc.ActiveView = v3d; views.Add(v3d.Id); trans.Commit(); //v3d.SetOrientation(new ViewOrientation3D(new XYZ(-1, 1, -1), new XYZ(0, 1, 1), new XYZ(0, 1, -1))); XYZ forward = new(-1, 1, -1); v3d.OrientTo(forward); ExportOption(saveDirChoosed, filesFullPathChoosed, famdoc, views, forward); //v3d.OrientTo(new XYZ(0, -1, 0)); //ExportOption(ps, saveDirChoosed, filesFullPathChoosed, famdoc, views); #region MyRegion //while (viewFamilyTypes.MoveNext()) //һ��Ҫ��movenext,��Ȼ�����쳣 //{ // if (viewFamilyTypes.Current.ViewFamily == ViewFamily.ThreeDimensional) // { // var view3D = View3D.CreateIsometric(famdoc, viewFamilyTypes.Current.Id); // //var view3D = (viewFamilyType != null) ? View3D.CreateIsometric(famdoc, viewFamilyType.Id) : null; // //var viewer = view3D.GetOrientation(); // if (view3D != null) // { // if (concol != null) // { // famdoc.Delete(concol.ToElementIds()); // //famdoc.Delete(dimcol.ToElementIds()); // } // if (dimcol != null) // { // foreach (Dimension dim in dimcol.ToElements()) // { // if (dim.ValueString != null) // { // //System.Diagnostics.Debug.WriteLine(dim.Id); // try // { // famdoc.Delete(dim.Id); // } // catch (Exception) // { // //System.Diagnostics.Debug.WriteLine(dim.Id); // } // } // } // } // views.Add(view3D.Id); // var graphicDisplayOptions // = view3D.get_Parameter( // BuiltInParameter.MODEL_GRAPHICS_STYLE); // //ģ����ʾΪ������� // graphicDisplayOptions.Set(6); // } // } //} #endregion forward = new XYZ(1, -1, -1); v3d.OrientTo(forward); ExportOption(saveDirChoosed, filesFullPathChoosed, famdoc, views, forward); forward = new XYZ(0, 1, 0); v3d.OrientTo(forward); ExportOption(saveDirChoosed, filesFullPathChoosed, famdoc, views, forward); //ExportOption(ps, saveDirChoosed, filesFullPathChoosed, famdoc, views); } } }