Я пытаюсь создать свой первый плагин Revit.Поместите один экземпляр семейства в проект Revit с помощью плагина C#
Я использую Revit 2014, и я хочу разместить экземпляр SINGLE семейства, загруженного из файла. Я на самом деле с помощью этого кода:
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class InsertFamily : IExternalCommand
{
readonly List<ElementId> _addedElementIds = new List<ElementId>();
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document document = uiApp.ActiveUIDocument.Document;
FamilySymbol family = null;
bool good = false;
using (var trans = new Transaction(document, "inserting family"))
{
trans.Start();
good = document.LoadFamilySymbol(@"my file path.rfa", "my type", new FamilyLoadingOverwriteOption(), out family);
trans.Commit();
}
if (good && family != null)
{
_addedElementIds.Clear();
uiApp.Application.DocumentChanged += applicationOnDocumentChanged;
uiApp.ActiveUIDocument.PromptForFamilyInstancePlacement(family);
uiApp.Application.DocumentChanged -= applicationOnDocumentChanged;
}
return Result.Succeeded;
}
private void applicationOnDocumentChanged(object sender, DocumentChangedEventArgs documentChangedEventArgs)
{
_addedElementIds.AddRange(documentChangedEventArgs.GetAddedElementIds());
}
}
class FamilyLoadingOverwriteOption : IFamilyLoadOptions
{
public bool OnFamilyFound(bool familyInUse, out bool overwriteParameterValues)
{
overwriteParameterValues = true;
return true;
}
public bool OnSharedFamilyFound(Family sharedFamily, bool familyInUse, out FamilySource source, out bool overwriteParameterValues)
{
source = FamilySource.Family;
overwriteParameterValues = true;
return true;
}
}
Проблема заключается в том, что метод PromptForFamilyInstancePlacement
позволяет пользователю вставить несколько экземпляров семейства. Я хочу, чтобы пользователь мог вставить только один экземпляр в проект. Я также напишу код, чтобы вернуть вставленный экземпляр (используя событие DocumentChanged
, как вы можете видеть), поэтому, возможно, этот обработчик может быть полезен в некотором роде.
Кстати, это решение не позволяет установить угол вставки для экземпляров. Они размещаются всегда с углом = 0. Другие способы его достижения? –
Я заметил, что при нажатии на пробел при вставке экземпляра он будет поворачиваться на 90 ° или, соответственно, на ссылку (например, на стену) под углом мыши –