//
// (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;
}
}
}
}