2012-04-01 4 views
1

Это мой первый вопрос. Я новичок в перепрограммировании 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; 
     } 
    } 
} 

} `

ответ

2

IsCommandAvailable не должно быть в классе команд. Вам действительно нужно написать класс, который реализует IExternalCommandAvailability. Вот пример из руководства API:

public class SampleAccessibilityCheck : IExternalCommandAvailability 
{ 
    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; 
    } 
} 

Затем вы можете указать имя класса внутри Аддин файла манифеста внутри тега AvailabilityClassName, такие как:

<AvailabilityClassName>MyNamespace.SampleAccessibilityCheck</AvailabilityClassName> 

, если у вас есть кнопка на ленте , класс PushButton также имеет свойство PushButton.AvailabilityClassName, в котором вы можете установить имя этого класса, чтобы ваша командная кнопка включала/отключила соответственно.

Надеюсь, это поможет.

+0

Большое спасибо! это сработало! Было очень приятно получить ответ, это позволяет мне продолжать учиться. Спасибо, Бугра! – PANANO

+0

Добро пожаловать в StackOverflow PANANO. Если этот ответ решит вашу проблему, пожалуйста, отметьте его как принятый. – skeletank

 Смежные вопросы

  • Нет связанных вопросов^_^