public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiApp = commandData.Application; var doc = uiApp.ActiveUIDocument.Document; var saveFileDialog = new SaveFileDialog { Filter = "Revit file (*.rvt)|*.rvt", FileName = doc.Title }; if (saveFileDialog.ShowDialog() != true) { return(Result.Cancelled); } File.WriteAllText(saveFileDialog.FileName, string.Empty); using (var namedPipeServer = new NamedPipeServerStream("PilotRevitAddinPipe", PipeDirection.InOut, 1, PipeTransmissionMode.Message)) { namedPipeServer.WaitForConnection(); var messageBuilder = new StringBuilder(); var messageBuffer = new byte[983]; do { namedPipeServer.Read(messageBuffer, 0, messageBuffer.Length); var messageChunk = Encoding.UTF8.GetString(messageBuffer).TrimEnd((char)0); messageBuilder.Append(messageChunk); messageBuffer = new byte[messageBuffer.Length]; } while (!namedPipeServer.IsMessageComplete); var revitProject = JsonConvert.DeserializeObject <RevitProject>(messageBuilder.ToString()); var shareFilePathDirectory = Path.GetDirectoryName(revitProject.CentralModelPath); if (shareFilePathDirectory == null) { return(Result.Failed); } Directory.CreateDirectory(shareFilePathDirectory); var iniPath = Path.Combine(shareFilePathDirectory, saveFileDialog.SafeFileName + ".ini"); File.WriteAllText(iniPath, revitProject.PilotObjectId); var savingSettings = new SaveAsOptions() { OverwriteExistingFile = true }; savingSettings.SetWorksharingOptions(new WorksharingSaveAsOptions() { SaveAsCentral = true }); UpdateProjectSettingsCommand.UpdateProjectInfo(doc, revitProject); doc.SaveAs(Path.Combine(revitProject.CentralModelPath), savingSettings); } return(Result.Succeeded); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiApp = commandData.Application; var doc = uiApp.ActiveUIDocument.Document; var saveFileDialog = new SaveFileDialog { Filter = "Revit file (*.rvt)|*.rvt", FileName = doc.Title }; if (saveFileDialog.ShowDialog() != true) { return(Result.Cancelled); } RevitProject revitProject; using (var namedPipeClient = new NamedPipeClientStream(".", "PilotRevitAddinPrepareProjectPipe")) { try { namedPipeClient.Connect(10000); } catch (TimeoutException) { return(Result.Failed); } var pipeStream = new StreamString(namedPipeClient); pipeStream.SendCommand(saveFileDialog.FileName); var answer = pipeStream.ReadAnswer(); revitProject = JsonConvert.DeserializeObject <RevitProject>(answer); } var shareFilePathDirectory = Path.GetDirectoryName(revitProject.CentralModelPath); if (shareFilePathDirectory == null) { return(Result.Failed); } if (!Directory.Exists(shareFilePathDirectory)) { Directory.CreateDirectory(shareFilePathDirectory); } var savingSettings = new SaveAsOptions() { OverwriteExistingFile = true }; savingSettings.SetWorksharingOptions(new WorksharingSaveAsOptions() { SaveAsCentral = true }); UpdateProjectSettingsCommand.UpdateProjectInfo(doc, revitProject); doc.SaveAs(revitProject.CentralModelPath, savingSettings); File.Copy(revitProject.CentralModelPath, saveFileDialog.FileName, true); return(Result.Succeeded); }