Задача была простая - форма с двумя кнопками: 1 - выбирает объекты, 2 - удаляет их.
Скажу сразу, если писать без окон все прекрасно работает, но с формами не получается уже два дня.
Возможно тема пересекается с
https://adn-cis.org/forum/index.php?topic=9744.msg42859#msg42859.
Смысл ошибки понятен, но где открывать и закрывать транзакцию не понимаю.
Может вообще обработчик событий писать в другом классе? Спасибо.
За код сильно не ругайте:
using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
namespace Shcool
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.DB.Macros.AddInId("C84184CD-3C7D-4295-AC04-8C8A8EB02901")]
public partial class ThisApplication
{
UIDocument uidoc;
Document doc;
public void FirstStep()
{
uidoc = this.ActiveUIDocument;
doc = uidoc.Document;
using(Transaction trans = new Transaction(doc, "DeleteObject"))
{
trans.Start();
GoGlamGo goGlamGo = new GoGlamGo(this);
goGlamGo.Run();
trans.Commit();
}
}
}
public class GoGlamGo
{
UIDocument uidoc;
Document doc;
RVObjecstSelect rVObjectsSelect;
IList<Reference> rl;
List<FamilyInstance> filist = new List<FamilyInstance>();
public GoGlamGo(Shcool.ThisApplication _this)
{
uidoc = _this.ActiveUIDocument;
doc = uidoc.Document;
rVObjectsSelect = new RVObjecstSelect();
rVObjectsSelect.btselectobj.Click += (s, a) => GetFIList();
rVObjectsSelect.btdeleteobj.Click += (s, a) => DeleteObj(filist);
}
public void Run()
{
rVObjectsSelect.Show();
}
public RVObjecstSelect UF
{
get {return rVObjectsSelect;}
}
public List<FamilyInstance> GetFIList()
{
rVObjectsSelect.Hide();
Selection sel = uidoc.Selection;
rl = sel.PickObjects(ObjectType.Element, "Select elements:");
rVObjectsSelect.Show();
filist = new List<FamilyInstance>();
foreach (Reference rf in rl)
{
filist.Add(doc.GetElement(rf) as FamilyInstance);
}
return filist;
}
private void DeleteObj(List<FamilyInstance> filist)
{
foreach (FamilyInstance fi in FIList)
{
doc.Delete(fi.Id);
}
}
public List<FamilyInstance> FIList
{
get
{
rVObjectsSelect.Close();
return filist;
}
}
}
}
Вот ошибка при удалении...