// // (C) Copyright 2003-2019 by Autodesk, Inc. // // Permission to use, copy, modify, and distribute this software in // object code form for any purpose and without fee is hereby granted, // provided that the above copyright notice appears in all copies and // that both that copyright notice and the limited warranty and // restricted rights notice below appear in all supporting // documentation. // // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE // UNINTERRUPTED OR ERROR FREE. // // Use, duplication, or disclosure by the U.S. Government is subject to // restrictions set forth in FAR 52.227-19 (Commercial Computer // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) // (Rights in Technical Data and Computer Software), as applicable. // using System; using System.IO; using System.Windows.Forms; using Autodesk.Revit.UI; using TaskDialog = Autodesk.Revit.UI.TaskDialog; namespace Revit.SDK.Samples.ImportExport.CS { /// /// Export formats /// public enum ExportFormat { /// /// DWG format /// DWG, /// /// DXF format /// DXF, /// /// SAT format /// SAT, /// /// DWF format /// DWF, /// /// DWFx format /// DWFx, /// /// GBXML format /// GBXML, /// /// FBX format /// FBX, /// /// DGN format /// DGN, /// /// IMG format /// Image, /// /// PDF format /// PDF } /// /// Import formats /// public enum ImportFormat { /// /// DWF format /// DWG, /// /// IMAGE format /// IMAGE, /// /// GBXML format /// GBXML, /// /// Inventor format /// Inventor } /// /// Data class contains the external command data. /// public class MainData { // Revit command data private ExternalCommandData m_commandData; // Whether current view is a 3D view private bool m_is3DView; /// /// Revit command data /// public ExternalCommandData CommandData { get { return m_commandData; } } /// /// Whether current view is a 3D view /// public bool Is3DView { get { return m_is3DView; } set { m_is3DView = value; } } /// /// Constructor /// /// Revit command data public MainData(ExternalCommandData commandData) { m_commandData = commandData; //Whether current active view is 3D view if (commandData.Application.ActiveUIDocument.Document.ActiveView.ViewType == Autodesk.Revit.DB.ViewType.ThreeD) { m_is3DView = true; } else { m_is3DView = false; } } /// /// Get the format to export /// /// Selected format in format selecting dialog /// The format to export private static ExportFormat GetSelectedExportFormat(string selectedFormat) { ExportFormat format = ExportFormat.DWG; switch (selectedFormat) { case "DWG": format = ExportFormat.DWG; break; case "DXF": format = ExportFormat.DXF; break; case "SAT": format = ExportFormat.SAT; break; case "DWF": format = ExportFormat.DWF; break; case "DWFx": format = ExportFormat.DWFx; break; case "GBXML": format = ExportFormat.GBXML; break; case "FBX": format = ExportFormat.FBX; break; case "DGN": format = ExportFormat.DGN; break; case "IMAGE": format = ExportFormat.Image; break; case "PDF": format = ExportFormat.PDF; break; default: break; } return format; } /// /// Export according to selected format /// /// Selected format public DialogResult Export(string selectedFormat) { ExportFormat format = GetSelectedExportFormat(selectedFormat); DialogResult dialogResult = DialogResult.OK; try { switch (format) { case ExportFormat.DWG: ExportDWGData exportDWGData = new ExportDWGData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportDWGData)) { dialogResult = exportForm.ShowDialog(); } break; case ExportFormat.DXF: ExportDXFData exportDXFData = new ExportDXFData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportDXFData)) { dialogResult = exportForm.ShowDialog(); } break; case ExportFormat.SAT: ExportSATData exportSATData = new ExportSATData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportSATData)) { dialogResult = exportForm.ShowDialog(); } break; case ExportFormat.DWF: case ExportFormat.DWFx: ExportDWFData exportDWFData = new ExportDWFData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportDWFData)) { dialogResult = exportForm.ShowDialog(); } break; case ExportFormat.GBXML: ExportGBXMLData exportGBXMLData = new ExportGBXMLData(m_commandData, format); dialogResult = Export(exportGBXMLData); break; case ExportFormat.FBX: ExportFBXData exportFBXData = new ExportFBXData(m_commandData, format); dialogResult = Export(exportFBXData); break; case ExportFormat.DGN: ExportDGNData exportDGNData = new ExportDGNData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportDGNData)) { dialogResult = exportForm.ShowDialog(); } break; case ExportFormat.Image: ExportIMGData exportIMGdata = new ExportIMGData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportIMGdata)) { dialogResult = DialogResult.OK; } break; case ExportFormat.PDF: ExportPDFData exportPDFData = new ExportPDFData(m_commandData, format); using (ExportWithViewsForm exportForm = new ExportWithViewsForm(exportPDFData)) { dialogResult = exportForm.ShowDialog(); } break; default: break; } } catch (Exception ex) { String errorMessage = "Failed to export " + format + " format" + ex.ToString(); ; TaskDialog.Show("Error", errorMessage, TaskDialogCommonButtons.Ok); } return dialogResult; } /// /// Export /// /// private static DialogResult Export(ExportData data) { String returnFilename = String.Empty; int filterIndex = -1; DialogResult result = ShowSaveDialog(data, ref returnFilename, ref filterIndex); if (result != DialogResult.Cancel) { data.ExportFileName = Path.GetFileName(returnFilename); data.ExportFolder = Path.GetDirectoryName(returnFilename); if (!data.Export()) { TaskDialog.Show("Export", "This project cannot be exported to " + data.ExportFileName + " in current settings.", TaskDialogCommonButtons.Ok); } } return result; } /// /// Show Save dialog /// /// Data to export /// File name will be returned /// Selected filter index will be returned /// public static DialogResult ShowSaveDialog(ExportData exportData, ref String returnFileName, ref int filterIndex) { using (SaveFileDialog saveDialog = new SaveFileDialog()) { saveDialog.Title = exportData.Title; saveDialog.InitialDirectory = exportData.ExportFolder; saveDialog.FileName = exportData.ExportFileName; saveDialog.Filter = exportData.Filter; saveDialog.FilterIndex = 1; saveDialog.RestoreDirectory = true; DialogResult result = saveDialog.ShowDialog(); if (result != DialogResult.Cancel) { returnFileName = saveDialog.FileName; filterIndex = saveDialog.FilterIndex; } return result; } } /// /// Get the format to import /// /// Selected format in format selecting dialog /// The format to import private static ImportFormat GetSelectedImportFormat(string selectedFormat) { ImportFormat format = ImportFormat.DWG; switch (selectedFormat) { case "DWG": format = ImportFormat.DWG; break; case "IMAGE": format = ImportFormat.IMAGE; break; case "GBXML": format = ImportFormat.GBXML; break; case "Inventor": format = ImportFormat.Inventor; break; default: break; } return format; } /// /// Export according to selected format /// /// Selected format /// public DialogResult Import(string selectedFormat) { DialogResult dialogResult = DialogResult.OK; ImportFormat format = GetSelectedImportFormat(selectedFormat); try { switch (format) { case ImportFormat.DWG: ImportDWGData importDWGData = new ImportDWGData(m_commandData, format); using (ImportDWGForm importForm = new ImportDWGForm(importDWGData)) { dialogResult = importForm.ShowDialog(); } break; case ImportFormat.IMAGE: ImportImageData importIMAGEData = new ImportImageData(m_commandData, format); dialogResult = Import(importIMAGEData); break; case ImportFormat.GBXML: ImportGBXMLData importGBXMLData = new ImportGBXMLData(m_commandData, format); dialogResult = Import(importGBXMLData); break; default: break; } } catch (Exception) { String errorMessage = "Failed to import " + format + " format"; TaskDialog.Show("Error", errorMessage, TaskDialogCommonButtons.Ok); } return dialogResult; } /// /// Import /// /// private static DialogResult Import(ImportData data) { String returnFilename = String.Empty; DialogResult result = ShowOpenDialog(data, ref returnFilename); if (result != DialogResult.Cancel) { data.ImportFileFullName = returnFilename; if (!data.Import()) { TaskDialog.Show("Import", "Cannot import " + Path.GetFileName(data.ImportFileFullName) + " in current settings.", TaskDialogCommonButtons.Ok); } } return result; } /// /// Show Open File dialog /// /// Data to import /// File name will be returned /// Dialog result public static DialogResult ShowOpenDialog(ImportData importData, ref String returnFileName) { using (OpenFileDialog importDialog = new OpenFileDialog()) { importDialog.Title = importData.Title; importDialog.InitialDirectory = importData.ImportFolder; importDialog.Filter = importData.Filter; importDialog.RestoreDirectory = true; DialogResult result = importDialog.ShowDialog(); if (result != DialogResult.Cancel) { returnFileName = importDialog.FileName; } return result; } } } }