Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: A.Egorov от 04-09-2020, 11:20:14

Название: Создание крыши Roof
Отправлено: A.Egorov от 04-09-2020, 11:20:14
Всем привет  ;)
Revit 2020, .NET 4.7
При попытки создать крышу в проекте возникает исключение типа System.AccessViolationException
с сообщением "Attempted to read or write protected memory. This is often an indication that other memory is corrupt".
метод
Код - C# [Выбрать]
  1. public FootPrintRoof NewFootPrintRoof(
  2.         CurveArray footPrint,
  3.         Level level,
  4.         RoofType roofType,
  5.         out ModelCurveArray footPrintToModelCurvesMapping
  6. )
после ковыряния выяснил следующие:
- если проекте есть крыша: все работает
- если создать крышу пользовательским инструментом, удалить, закрыть проект с сохранением: все работает

вопрос: в проекте нужно как-то активировать крыши?
Название: Re: Создание крыши Roof
Отправлено: Александр Игнатович от 04-09-2020, 11:53:42
Проверял в 2020.2.3, в 2020.2.1 и до кучи в 2019, воспроизвести не смог. Тестировал на чистом файле, т.е., файл\новый проект, в шаблоне выбирал "нет"
Название: Re: Создание крыши Roof
Отправлено: A.Egorov от 04-09-2020, 13:48:24
Проверял в 2020.2.3, в 2020.2.1 и до кучи в 2019, воспроизвести не смог. Тестировал на чистом файле, т.е., файл\новый проект, в шаблоне выбирал "нет"

Спасибо, тоже попробовал на пустом шаблоне - работает.
В моем проекте - нет.
(https://i.postimg.cc/7bft3nGZ/error.png) (https://postimg.cc/7bft3nGZ)
из сообщения исключения, как понял, что-то не так с профилем

но профиль максимально прост:
   
Код - C# [Выбрать]
  1.         [TransactionAttribute(TransactionMode.Manual)]
  2.         [RegenerationAttribute(RegenerationOption.Manual)]
  3.         class Class1 : IExternalCommand
  4.         {
  5.                 public Result Execute(ExternalCommandData commandData,
  6.                         ref string messege,
  7.                         ElementSet elements)
  8.                 {
  9.                         Document doc = commandData.Application.ActiveUIDocument.Document;
  10.  
  11.                         const double mmToft = 0.00328084;
  12.  
  13.                         CurveArray profile = new CurveArray();
  14.  
  15.                         XYZ p1 = new XYZ(0, 0, 0);
  16.                         XYZ p2 = new XYZ(4000 * mmToft, 0, 0);
  17.                         XYZ p3 = new XYZ(4000 * mmToft, 4000 * mmToft, 0);
  18.                         XYZ p4 = new XYZ(0, 4000 * mmToft, 0);
  19.  
  20.                         profile.Append(Line.CreateBound(p1, p2));
  21.                         profile.Append(Line.CreateBound(p2, p3));
  22.                         profile.Append(Line.CreateBound(p3, p4));
  23.                         profile.Append(Line.CreateBound(p4, p1));
  24.  
  25.                         Level level = doc.ActiveView.GenLevel;
  26.                         RoofType defaultType = doc.GetElement(doc.GetDefaultElementTypeId(ElementTypeGroup.RoofType)) as RoofType;
  27.  
  28.                         using (Transaction t = new Transaction(doc, "CreateRoof"))
  29.                         {
  30.                                 t.Start();
  31.  
  32.                                 ModelCurveArray footPrintToModelCurveMapping = new ModelCurveArray();
  33.                                 FootPrintRoof roof = doc.Create.NewFootPrintRoof(profile, level, defaultType, out footPrintToModelCurveMapping);
  34.  
  35.                                 Parameter roomBoundaring = roof.get_Parameter(BuiltInParameter.WALL_ATTR_ROOM_BOUNDING);
  36.                                 roomBoundaring.Set(0);
  37.  
  38.                                 t.Commit();
  39.                         }
  40.                         return Result.Succeeded;
  41.         }
  42.  
Название: Re: Создание крыши Roof
Отправлено: A.Egorov от 04-09-2020, 13:59:26
В общем проблема в файле