Это мой первый вопрос. Я новичок в перепрограммировании api, поэтому мне жаль, если мой вопрос слишком хромает или сфокусирован. Надеюсь, кто-нибудь может мне помочь. Я пытаюсь реализовать метод Iscommand в этом простом примере обучения, и я не могу понять, почему он не работает, я имею в виду, что команда по-прежнему доступна для использования в любом сценарии. Заранее спасибо!Не могу получить «IscommandAvailable» для работы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
using System.Windows.Forms;
namespace PruebasAPI
{
[Autodesk.Revit.Attributes.Transaction(TransactionMode.Automatic)]
class IExternalcommand_elements : IExternalCommand
{
public bool IsCommandAvailable(Autodesk.Revit.UI.UIApplication applicationData,
CategorySet selectedCategories)
{
//allow button click if there is no active selection
if (selectedCategories.IsEmpty)
return true;
//allow button click if there is at least one wall selected
foreach (Category c in selectedCategories)
{
if (c.Id.IntegerValue == (int)BuiltInCategory.OST_Walls)
return true;
}
return false;
}
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
try
{
Document doc = commandData.Application.ActiveUIDocument.Document;
UIDocument uidoc = commandData.Application.ActiveUIDocument;
//delete selected elements
ICollection<Autodesk.Revit.DB.ElementId> ids = doc.Delete(uidoc.Selection.Elements);
TaskDialog taskdialog = new TaskDialog("Revit");
taskdialog.MainContent =
("click yes to return succeded.Selected members will be deleted. \n" +
"click no to return failed.Selected members will not be deleted \n" +
"click cancel to return cancelled. Selected members will not be deleted.");
TaskDialogCommonButtons buttons = TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No | TaskDialogCommonButtons.Cancel;
taskdialog.CommonButtons = buttons;
TaskDialogResult taskdialogresult = taskdialog.Show();
if (taskdialogresult == TaskDialogResult.Yes)
{
return Result.Succeeded;
}
else if (taskdialogresult == TaskDialogResult.No)
{
elements = uidoc.Selection.Elements;
message = "failed to delete selection";
return Result.Failed;
}
else
{
return Result.Cancelled;
}
}
catch
{
message = "unespected dika";
return Result.Failed;
}
}
}
} `
Большое спасибо! это сработало! Было очень приятно получить ответ, это позволяет мне продолжать учиться. Спасибо, Бугра! – PANANO
Добро пожаловать в StackOverflow PANANO. Если этот ответ решит вашу проблему, пожалуйста, отметьте его как принятый. – skeletank