2017-02-14 4 views
1

Ich bin sehr neu in C# und Codierung. Wenn es möglich ist, bin ich auf der Suche nach Hilfe, um herauszufinden, wie ich dieses Stück Code reparieren kann.Revit API - Falscher vollständiger Klassenname

Sie arbeiten individuell. Ich kann eine neue Schaltfläche in der Multifunktionsleiste erstellen und die Standard-Hello-Welt ausführen. Ich habe auch ein Makro, das funktioniert, wo ich alle meine Blätter und Ansichten erfolgreich entfernen kann, aber der Versuch, die beiden zu kombinieren, verursacht große Schwierigkeiten! Der Code erstellt in Ordnung, aber ich erhalte diesen Fehler innerhalb revit:

‚konnte nicht die Add-In‚Löschen Ansichten‘, weil die Klasse ‚DeleteViews‘nicht in der Add-In Baugruppe gefunden werden kann initialisieren FullClassName bietet den Erweiterungspunkt für Revit, um Add-In-Anwendung aufzurufen. Für Revit zum Ausführen des Add-Ins müssen Sie sicherstellen, dass diese Klasse die Schnittstelle "Autodesk.Revit.UI.ExternalCommand" implementiert. '

Ich bin mir ziemlich sicher, dass mein Problem in diesem 2. Bit Code referenziert. Ich weiß, dass ich es nicht richtig anrufe, aber keine Lösungen gefunden habe.

Entschuldigung, wenn das eine dumme Frage ist, aber würde jede Hilfe wirklich schätzen, um mir zu helfen, zu lernen!

Vielen Dank für jede Hilfe können Sie mir geben

Der Code:

namespace BGPanel 
{ 
public class CsBGPanel : IExternalApplication 
{ 
    public UIDocument ActiveUIDocument { get; private set; } 
    public Result OnStartup(UIControlledApplication application) 
    { 
     RibbonPanel ribbonPanel = application.CreateRibbonPanel("Tools"); 

     string thisAssemblyPath = Assembly.GetExecutingAssembly().Location; 
     PushButtonData buttonData = new PushButtonData("cmdDeleteViews", 
      "Delete Views", thisAssemblyPath, "BGPanel.DeleteViews"); 

     PushButton pushButton = ribbonPanel.AddItem(buttonData) as PushButton; 

     pushButton.ToolTip = "Delete all sheets, schedules & views except structural plans"; 

     Uri uriImage = new Uri(@"C:\Revit_API\Revit_2015\32px-Broom.png"); 
     BitmapImage largeImage = new BitmapImage(uriImage); 
     pushButton.LargeImage = largeImage; 

     return Result.Succeeded; 
    } 

     public void DeleteViews() 
    { 
     UIDocument uidoc = this.ActiveUIDocument; 
     Document doc = uidoc.Document; 

     FilteredElementCollector collector = new FilteredElementCollector(doc); 
     ICollection<Element> collection = collector.OfClass(typeof(View)).ToElements(); 

     using (Transaction t = new Transaction(doc, "Delete Views")) 
     { 
      t.Start(); 

      int x = 0; 

      foreach (Element e in collection) 
      { 
       try 
       { 
        View view = e as View; 

        switch (view.ViewType) 
        { 
         case ViewType.FloorPlan: 
          break; 
         case ViewType.EngineeringPlan: 
          break; 
         case ViewType.ThreeD: 
          break; 
         default: 
          doc.Delete(e.Id); 
          x += 1; 
          break; 
        } 
       } 
       catch (Exception ex) 
       { 
        View view = e as View; 
        TaskDialog.Show("Error", e.Name + "\n" + "\n" + ex.Message); 
        TaskDialog.Show("Error", ex.Message); 
       } 
      } 
      t.Commit(); 

      TaskDialog.Show("BG_API DeleteViews", "Views Deleted: " + x.ToString()); 
     } 

    } 
    public Result OnShutdown(UIControlledApplication application) 
    { 
     return Result.Succeeded; 
    } 
} 
} 

Antwort

1

Zuerst stattdessen die Eingabe der Klasse selbst nennen, betrachten Reflexion mit wie:

typeof(YourClassName).FullName 

Zweitens jeder Der Befehl in Revit benötigt eine eigene Klasse, die IExternalCommand implementiert. Ich habe nicht getestet, aber Ihr Code soll in etwa wie folgt sein:

using System; 
using System.Collections.Generic; 
using System.Reflection; 
using System.Windows.Media.Imaging; 

using Autodesk.Revit.DB; 
using Autodesk.Revit.UI; 

namespace BGPanel 
{ 
    public class CsBGPanel : IExternalApplication 
    { 
    public Result OnStartup(UIControlledApplication application) 
    { 
     RibbonPanel ribbonPanel = application.CreateRibbonPanel("Tools"); 

     string thisAssemblyPath = Assembly.GetExecutingAssembly().Location; 
     PushButtonData buttonData = new PushButtonData("cmdDeleteViews", 
     "Delete Views", thisAssemblyPath, typeof(DeleteViews).FullName); 

     PushButton pushButton = ribbonPanel.AddItem(buttonData) as PushButton; 

     pushButton.ToolTip = "Delete all sheets, schedules & views except structural plans"; 

     Uri uriImage = new Uri(@"C:\Revit_API\Revit_2015\32px-Broom.png"); 
     BitmapImage largeImage = new BitmapImage(uriImage); 
     pushButton.LargeImage = largeImage; 

     return Result.Succeeded; 
    } 

    public Result OnShutdown(UIControlledApplication application) 
    { 
     return Result.Succeeded; 
    } 
    } 

    public class DeleteViews : IExternalCommand 
    { 
    // this will not work... 
    //public UIDocument ActiveUIDocument { get; private set; } 

    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 
    { 
     UIDocument uidoc = commandData.Application.ActiveUIDocument; //this.ActiveUIDocument; 
     Document doc = uidoc.Document; 

     FilteredElementCollector collector = new FilteredElementCollector(doc); 
     ICollection<Element> collection = collector.OfClass(typeof(View)).ToElements(); 

     using (Transaction t = new Transaction(doc, "Delete Views")) 
     { 
     t.Start(); 

     int x = 0; 

     foreach (Element e in collection) 
     { 
      try 
      { 
      View view = e as View; 

      switch (view.ViewType) 
      { 
       case ViewType.FloorPlan: 
       break; 
       case ViewType.EngineeringPlan: 
       break; 
       case ViewType.ThreeD: 
       break; 
       default: 
       doc.Delete(e.Id); 
       x += 1; 
       break; 
      } 
      } 
      catch (Exception ex) 
      { 
      View view = e as View; 
      TaskDialog.Show("Error", e.Name + "\n" + "\n" + ex.Message); 
      TaskDialog.Show("Error", ex.Message); 
      } 
     } 
     t.Commit(); 

     TaskDialog.Show("BG_API DeleteViews", "Views Deleted: " + x.ToString()); 
     } 
     return Result.Succeeded; // must return here 
    } 
    } 
} 
1

Sie sollten die Revit API arbeiten durch Material der ersten Schritte, bevor irgendetwas anderes überhaupt zu tun, vor allem des DevTV und My First Revit Plugin Video-Tutorials:

http://thebuildingcoder.typepad.com/blog/about-the-author.html#2

Dann ist diese Frage und viele andere grundsätzliche Fragen werden beantwortet Front, und Sie werden sich selbst und andere einige Mühe und Kopf-Kratzen speichern.

Verwandte Themen