Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

Verknüpfung von .sym Dateien und Allplan Symbols


Hallo!

Ich würde gerne folgendes machen:
Der Benutzer soll in der Lage sein, ein Symbol aus einem Ordner mithilfe des Symbol Dialogs auszuwählen. Danach wird geprüft, ob dieses Symbol bereits im Projekt platziert wurde. Wenn ja, soll man eine Liste von den Instanzen bekommen.

Damit der Benutzer ein Symbol auswählen kann, wird diese Funktion verwendet:

    <Parameter>
        <Name>NewCCMapping</Name>
        <Text>Bauteil hinzufügen</Text>
        <Value>Bauteil auswählen</Value>
        <ValueType>String</ValueType>
        <ValueDialog>SymbolDialog</ValueDialog>
    </Parameter>

Nun habe ich den Pfad und lade das Element folgendermaßen:

 library_element_properties = \
                    AllplanBasisElements.LibraryElementProperties(fullPathName=      path,
                                                                elementType=       AllplanBasisElements.LibraryElementType.eSmartSymbol,
                                                                placementMatrix=   AllplanGeo.Matrix3D())

                library_element = AllplanBasisElements.LibraryElement(library_element_properties)
               

Um zu überprüfen, ob sich das Element bereits im Projekt befindet, habe ich versucht, diese Funktion aufzurufen:

element_adapters = AllplanBaseElements.ElementsSelectService.SelectAllElements(doc)

Leider schaffe ich es aber nicht, eine Verknüpfung herzustellen... Ich habe versucht, den Pfad aus einem Element Adapter zu kriegen bzw. die Bauteil ID aus dem Library Element, jedoch bin ich da nicht draufgekommen, wie das gehen könnte...

Bin dankbar für jede Hilfe

Ein Symbol ist erst mal eine lose Zusammenstellung von Zeichnungselementen.
Diese haben lediglich eine gleiche Segment-Nummer.

Wenn ein Symbol von der Bibliothek in die Datenbank eingefügt wird, wird dessen Herkunft (Name des Symbols in der Bibliothek) nirgends gespeichert! Die Elemente des Symbols werden zu normalen Zeichnungsobjekten, und wissen danach nicht, dass sie aus der Bibliothek stammen.

Insofern ist Dein Workflow nicht umsetzbar, jedenfalls nicht mit Symbolen.

Anders sieht es aus, wenn Du Makros verwenden würdest. Diese sind von Haus aus dazu vorgesehen,
dass sich mehrere (Makro-)Verlegungen eine Definition "teilen".
Wenn ein Makro (bestehend aus Makro-Definition und Makro-Verlegung) aus der Bibliothek in die Datenbank eingefügt wird, wird geprüft, ob die Defintion auf dem Teilbild schon vorhanden ist. Das wird über den Vergleich des Zeitstempel der Erstellung der Defintion gemacht. Wenn die Defintion schon da ist, wird nur die Verlegung an die schon bestehende Definition "referenziert".
Das Ganze funktioniert allerdings nur pro Teilbild, da Definition und Verlegung auf demselben Teilbild sein müssen. Projektweit (wie von Dir gewünscht) ist das ausgeschlossen.

Nun zu Deinem Workflow: Ich bezweifle mal, daß beim Einfügen mittels Python-Interactor die Untersuchtung mit dem Zeitstempel gemachgt wird. Der Zeitstempel ist "von aussen" nicht lesbar! Selbst ein PythonPart, welches auch nur ein Makro ist, benutzt stattdessen einen Hashwert über alle Parameter und speichert diesen in einem bestimmten Attribut. Das Smartpart(-Makro) macht es genauso.

Du müßtest also bei einem selbst erstellten Makro irgendeine ID (Zeitstempel oder Hashwert) generieren,
und in einem Attribut speichern, und dann könntest Du nach "schon" vorhandenen Makros "suchen".

Diese ID muss der Regel genügen: gleiche Makro-Defintionen (Elemente auf den Makro-Folien) haben die gleiche ID. Eigentlich müßte man also so etwas wie ein Geometrie-Hash aller Folien-Elemente erzeugen.
Das ist alles andere als trivial! Nimm lieber einen Zeitstempel...

Vielen Dank für die ausführliche Antwort!

Wie komme ich denn zu der Makro ID? Ich würde gerne verschiedene Informationen (siehe Screenshot) einsehen, nur leider komme ich nicht ganz drauf, wie ich die bekommen könnte.... Ich würde gerne ein Element auswählen und von diesem dann z.B. den Makronamen anzeigen lassen. Haben Sie da eine Idee wie das funktionieren könnte?

Liebe Grüße

Anhänge (1)

Typ: image/png
39-mal heruntergeladen
Größe: 14,15 KiB

MacroPlacementProperties und MacroProperties haben das Attribut Name.