2016-06-18 7 views
0

Ich habe eine Frage, die mehr Theorie der "Best Practices" als tatsächliche technische Programmierung ist.Revit API Bearbeiten von Elementen nach der Erstellung

Ich versuche über die beste Möglichkeit zu denken, ein Element zu bearbeiten, nachdem es von meinem Programm platziert wurde. Speziell habe ich mein Programm wie folgt eingerichtet:

Benutzer klickt ein Tool, das im Wesentlichen "einige Familien in ein Projekt fügt" in Revit. Es liest eine Skizze, die vom Benutzer erstellt wurde, und platziert Elemente basierend auf der Skizze.

Sketch

Element creation

Ich mag dem Benutzer die Möglichkeit zu geben, zu jenen Elementen, die ähnlich zu sagen, eine Bodenplatte „um die Skizze zu bearbeiten“. Ich glaube nicht, dass die Revit-API die Möglichkeit zum Skizzieren mit dem Sketch-Modus bietet. Ich versuche, diese sehr nützliche Fähigkeit in meinem Programm nachzuahmen.

Also, was ich getan habe, ist erweiterbar Speicher verwendet und speichern Sie eine UniqueId in alle Elemente mit meinem Werkzeug erstellt. Was das Programm tut, ist, wenn der Benutzer auf das Element "Elemente bearbeiten" klickt, fragt das Programm nach der neuen Skizze, fragt nach einem bestehenden Element, liest die UniqueId des vorhandenen Elements und ruft alle Elemente mit dieser UniqueId auf und löscht sie, dann die Programm fügt neue Elemente mit der neuen Skizze des Benutzers wieder in das Projekt ein.

Das Problem ist, wenn der Benutzer die ursprünglichen Elemente löscht, die dem Projekt hinzugefügt wurden, und dann versucht, sie zu bearbeiten, wie kann ich garantieren, dass der Benutzer nicht die ursprünglichen Elemente mit der UniqueId löschen wird? Ich denke, der Weg zu gehen ist, die Dynamic Model Update-Funktionalität in der Revit-API zu verwenden.

Wie werden die meisten dieser Algorithmen geschrieben? Bin ich hier richtig? Ordne ich den Elementen einfach UniqueIds zu und speichere sie auf den Elementen selbst, damit ich sie später aufrufen kann? Vielleicht gibt es ein grundlegendes theoretisches Stück des Puzzles, das ich vermisse. Datenstrukturen?

Antwort

0

Ich denke, Sie sind im Wesentlichen auf dem richtigen Weg.

Die Verwendung von erweiterbarem Speicher zum Speichern der UniqueIds ist definitiv der richtige Weg und auch die Verwendung der dynamischen Modellaktualisierungsfunktion von DMU, ​​um auf Änderungen zu reagieren, klingt gut.

Die einzige Sache, die unklar zu sein scheint, ist die Tatsache, dass das Revit den Elementen beim Erstellen automatisch die eindeutigen IDs zuweist, und Sie können nichts dagegen tun. Die eindeutige ID ist einzigartig und unveränderbar, und Sie haben keine Kontrolle darüber.

Daher ist es wahrscheinlich am einfachsten, alle vorherigen Skizzenelemente zu löschen und die gesamte Skizze und alle Elemente, die sie definieren, neu zu erstellen, wenn die Skizze in irgendeiner Weise geändert werden muss.

+0

Danke für die Antwort. Um die Dinge zu klären, benutze ich erweiterbaren Speicher und erstelle eine einzige UniqueID und es wird auf alle Elemente angewendet, die zu dieser Skizze gehören. Wenn Sie die Skizze bearbeiten, sucht die Software dieses Schema und die dem Feld in der Entität zugewiesene Ubique-ID. Diese UniqueID, über die ich die Kontrolle habe. Auch nachdem ich viele Revit api Hilfeartikel gelesen hatte, war ich unter dem Eindruck, UniqueID ist der Weg zu gehen, da ich Elemente von einem Projekt zum anderen kopieren kann und die ID bleibt einzigartig. Maxence, sagst du, dass das mit Elementiden passieren kann? – pirit4

+0

Wenn Sie Element-IDs im erweiterbaren Speicher verwenden, verarbeitet Revit die Übersetzung der Beziehungen auf intelligente Weise: http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –

0

Sie sollten ElementId anstelle von UniqueId für strukturierten Speicher verwenden, da eine ElementId automatisch der neuen ElementId zugeordnet wird, wenn ein Arbeitsfreigabeupdate auftritt. Die ElementId wird auch auf ElementId.InvalidElementId gesetzt, wenn das Element gelöscht wird.

+0

vollständig zustimmen! Danke für das Aufzeigen! Hier ist ein Hinweis dazu: http://thebuildingcoder.typepad.com/blog/2011/06/extensible-storage-features.html#7 –

Verwandte Themen