Hallo,
wir bräuchten in Annotation ein Kommande das es ermöglicht, eine Skizze zu wählen und alles was sich innerhalb der Skizze befindet (Ansichten, Symbole Skizzen, Linien, Texte) gemeinsam zu verschieben.
Leider gibt es in Annotation kein allgemeines Kommando zum Verschieben, sondern immer für jede Art von Objekt/Element ein eigenes.
Daher bleibt mir nichts anderes übrig als selber zu programmieren.
Bisher bin ich soweit gekommen dass ich die Eckpunkte der gewählten Skizze abfrage und dann mittels get_selection alles selektiere was sich innerhalb der Box befindet.
Mit einer check-function muss für jedes Objekt/Element geprüft werden ob es sich direkt am Blatt befindet.
Soweit, so gut.
Meine Fragen/Probleme:
- Um die Eckpunkte der gewählten Skizze zu bestimmen verwende ich das Standard-ME10-Makro Docu_get_part_box. Dieses liefert die Eckpunkte in einer Plist. Für das :select :by_box_docu_rest brauche die Punkte in einer Structure. Leider gibt es im IKIT keine dokumentierte Funktion zum Umwandeln. 2 undokumentierte Funktionen habe ich gefunden:
Code:
( oli :: docupntcnp x-Koordinate y-Koordinate "Annotation")
Da die Plist Strings liefert müssen diese mittels sd-read-fron-string umgewandelt werden.
Code:
(frame2::make-GPNTDOCU :x x-Koordinate :y y-Koordinate :gport "Annotation")
Hier ist eigenartigerweise kein sd-read-from-string erforderlich.Welche der beiden Funktionen ist empfehlenswerter?
Sollte docupntcnp nicht eigentlich eine exportierte Funktion und auch dokumentiert sein? Immerhin gibts ja den :value-type : docupntcnp. Außerdem ist die Funktion im Aufzeichner auch ohne Package-Angabe zu finden.
- Ich habe keine dokumentierte (LISP)Möglichkeit gefunden wie ich in der :check_function den Besitzer von Skizzen oder Symbolen ermittle. Es gibt aber eine ME10-Funktion namens DOCU_PARENT_PART_ID. Damit kommt man relativ einfach zu einem brauchbaren Ergebnis.
Somit kann ich schon mal für alle Objekte (Ansichten, Skizzen, Symbole) den Besitzer ermitteln und entsprechend filtern.Was mich in diesem Zusammenhang auch interessieren würde:
Die beiden oben angeführten Annotator-Funktionen habe ich mittels ME10-Trace eher zufällig gefunden. Ist es eigentlich empfehlenswert, Annotator-Funktionen die nicht in der normalen ME10-Docu aufgelistet sind zu verwenden und gibt es dafür eine eigene Doku?
- Das Selektieren von Linien und Texten funktioniert überhaupt nicht. Wie kann ich mittels get_selection Elemente innerhalb eines Rahmens selektieren?
Code:
(get_selection
:focus_type *sd-anno-geo-seltype*
:select :by_box_docu_rest
(frame2::make-GPNTDOCU :x x-Koordinate ll :y y-Koordinate ll :gport "Annotation")
(frame2::make-GPNTDOCU :x x-Koordinate ur :y y-Koordinate ur :gport "Annotation")
:select-attribute : docu-user-geo-only)
funktioniert leider überhaupt nicht. Auch nicht mit :by_box_docu_geo und auch nicht ohne :select-attribute : docu-user-geo-only
Fehlermeldung: LISP-Fehler: 188283072 is not of type (OR STRING EXTENDED-STRING SYMBOL).
Wie ich einen grafischen Debugger vermisse!
P.S.: Die falschen Leerzeichen vor und nach den Doppelpunkten habe ich wegen der Smileys eingefügt.
------------------
Gruß aus dem Salzkammergut
Thomas
[Diese Nachricht wurde von holt am 09. Jun. 2010 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP