コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }