Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Autodesk уже зафиксировал эту проблему - https://forums.autodesk.com/t5/revit-api-forum/using-ext-storage-inside-documentsavingas-event-handler-causes/m-p/7783698/highlight/true#M28704. Но когда она будет решена неизвестно.
2
Мне пока что пришло в голову только одно решение: запретить сохранение с перезаписью старого файла
Код - C# [Выбрать]
  1.         public static void DocumentSavingAs_EventHandler(object sender, DocumentSavingAsEventArgs e)
  2.         {
  3.             if (!File.Exists(e.PathName))
  4.             {
  5.                 Document doc = e.Document;
  6.                 SaveDocumentObjectIds(doc);
  7.             }
  8.             else if(e.Cancellable)
  9.             {
  10.                 TaskDialog.Show("ПРОЕКТ НЕ СОХРАНЕН!", "Для сохранения проекта с именем "
  11.                     + e.PathName + " необходимо вручную удалить или переименовать существующий"+
  12.                     " файл с данным именем.");
  13.                 e.Cancel();
  14.             }
  15.         }
  16.  

Но в документации написано, что это событие может быть неотменяемым в том случае, если оно вызывается в момент закрытия проекта.
3
Сразу добавлю, что удалить существующий файл в обработчике DocumentSavingAs не получается. Этот файл уже заблокирован.
Ревит меняет имя старого файла, дописывая суффикс с номером и записывает новый файл с именем старого
4
Я заметил еще одну особенность: проблема возникает только в том случае, когда при сохранении с новым именем, мы перезаписываем уже существующий файл.
Если до этого в данном расположении еще не было файла, то проблема не возникает.
5
1. имеем блок с мтекстом  размер текста 125
2. в одном из абзаце текста стоят настройки отступа и табуляции  375 (в самом тексте они зашифрованы как \pi-3,l3; (125*3= 375))
3. блок вставлен в чертеж с масштабом 0.02

разбиваем блок

получаем текст высотой 2.5  и отступы от текста с высотой 125 равные тем же 375,
при этом строка форматирования становиться pi-375,l375
а должна быть по идее если я все правильно почитал 375*0,02/2.5 =3 тобиш \pi-3,l3;

как то так !
6
Цитировать
Никогда не видел такой записи проверки на null. Очень удобно)
Очень упрощает код. так же проверку можно свести к такому виду:

Код - C# [Выбрать]
  1.             if (uiApp?.ActiveUIDocument?.Document?.IsFamilyDocument != false)
  2.                 return;
7
Посмотрю обязательно в понедельник. У меня были проблемы что не всегда удавалось повторить пропадания но ошибку я видел. Мне сейчас очень близка эта тема сохранения информации, занимаюсь этим активно и хочу разобраться. Кстати я привязывался к событиям немного по другому:

там где ваш код
Код - C# [Выбрать]
  1. a.ControlledApplication.ApplicationInitialized += OnApplicationInitialized;


я делал привязку к событиям сохранения. (Но не думаю что в этом дело.)

Код - C# [Выбрать]
  1.                 a.ControlledApplication.DocumentSaving += new EventHandler<Autodesk.Revit.DB.Events.DocumentSavingEventArgs>(documentSaving);
  2.                 a.ControlledApplication.DocumentSavingAs += new EventHandler<Autodesk.Revit.DB.Events.DocumentSavingAsEventArgs>(documentSavingAs);
8
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Internal;
  6.  
  7. [assembly: ExtensionApplication(typeof(Rivilis.MyObjectViewer))]
  8. [assembly: CommandClass(typeof(Rivilis.MyObjectViewer))]
  9.  
  10. namespace Rivilis
  11. {
  12.   public class MyObjectViewer : IExtensionApplication
  13.   {
  14.     void IExtensionApplication.Initialize()
  15.     {
  16.       // Preloading AecUtilities.arx
  17.       if (!Utils.IsCommandDefined("AecObjectViewer"))
  18.        SystemObjects.DynamicLinker.LoadModule("AecUtilities.arx", false, false);
  19.       Utils.AddCommand("ACAD_MAIN", "AecObjectViewer", "ObjectViewer", CommandFlags.UsePickSet | CommandFlags.Redraw, MyObjectViewerHandler);
  20.     }
  21.  
  22.     void IExtensionApplication.Terminate()
  23.     {
  24.       // Do plug-in application clean up here
  25.     }
  26.    
  27.     public static void MyObjectViewerHandler() // This method can have any name
  28.     {
  29.       Document doc = Application.DocumentManager.MdiActiveDocument;
  30.       Editor ed = doc.Editor;
  31.       ed.WriteMessage("\nMyObjectViewer..");
  32.       doc.SendStringToExecute("_AecUtilities70.AecObjectViewer ", true, false, false);
  33.     }
  34.   }
  35. }

А это результат выбора из контекстного меню:


9
А в контекстном меню, видимо, прописана команда с пространством имён.
А вот это крайне мало вероятно. Она скорее всего прописана или как _AECOBJECTVIEWER или как _OBJECTVIEWER. ARXDBG тебе в руки. :-)
Проверил, что после _UNDEFINE OBJECTVIEWER из контекстного меню она на запускается (C3D 2016)
10
Попробовал ACAD_MAIN, и просто без указания пространства имён. Ошибки при загрузке DLL не возникает, но и команда не переопределяется. Точнее даже не команда, а действие по выбору пункта в контекстном меню. Если бы этот инструмент вызывался кнопкой на ленте, то сработало бы (посмотрел настройки в файле адаптации). А в контекстном меню, видимо, прописана команда с пространством имён.
Наверное, попробую в понедельник на свежую голову ещё повоевать с командными событиями, может удастся всё-таки через них сделать. Сейчас уже мозг отказывается работать...
Страницы: [1] 2 3 ... 10