Предложите пользователю ответить на логический выбор с помощью Revit API в C#

Я создал плагин Revit на C#, который позволяет пользователям, совершенно незнакомым с 3D-технологиями, выбирать семейство и вставлять его в свой проект. Но сейчас у пользователя нет выбора между размещением объекта на точке где угодно или на грани. Это либо одно, либо другое. Прямо сейчас мой код выглядит так:

bool useSimpleInsertionPoint = false; //or true
bool useFaceReference = true; //or false
if (useSimpleInsertionPoint)
{
//my code for insertion on point here
}
if (useFaceReference)
{
//my code for face insertion here
}

Что я хотел бы сделать, так это спросить пользователя, что он хочет сделать. Сработает ли TaskDialog.Show или что-то еще?

Заранее спасибо.


person Jordi1302    schedule 03.03.2015    source источник


Ответы (2)


Подход Винсента хорош. Единственное, что мне нравится больше, — это использование опций CommandLink с TaskDialog. Это дает вам кнопки «больших вариантов» для выбора, предоставляет как ответ, так и необязательную строку «объяснения» по каждому ответу.

Код выглядит так:

TaskDialog td = new TaskDialog("Decision");
td.MainContent = "What do you want to do?";
td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1,
                   "Use Simple Insertion Point",
                   "This option works for free-floating items");
td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2,
                    "Use Face Reference",
                    "Use this option to place the family on a wall or other surface");

switch (td.Show())
 {
     case TaskDialogResult.CommandLink1:
        // do the simple stuff
        break;

     case TaskDialogResult.CommandLink2:
       // do the face reference
        break;

     default:
       // handle any other case.
        break;
 }
person Matt    schedule 04.03.2015
comment
Большое спасибо, именно то, что мне нужно! Постараюсь как можно скорее! - person Jordi1302; 04.03.2015

Это должно помочь:

TaskDialog dialog = new TaskDialog("Decision");
dialog.MainContent = "What do you want to do?";
dialog.AllowCancellation = true;
dialog.CommonButtons = TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No;

TaskDialogResult result = dialog.Show();
if(result == TaskDialogResult.Yes){
    // Yes
    TaskDialog.Show("yes", "YES!!");
}
else
{
    // No
    TaskDialog.Show("no", "NO!!");
}

Код протестирован и доказал свою работоспособность в макросе Revit в 2014 году, поэтому он должен нормально работать и в других надстройках.

person Vincent Cadoret    schedule 03.03.2015
comment
Большое спасибо ! Постараюсь как можно скорее! - person Jordi1302; 04.03.2015