| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: popup_list (374 mal gelesen)
|
Uwe Neumann Mitglied
Beiträge: 18 Registriert: 13.12.2002
|
erstellt am: 14. Jun. 2010 10:26 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe folgendes Problem: Es soll eine Liste in einem Dialog als popup_list angezeigt werden. Die Liste ist "recht" lang - ca. 400 Listeneinträge (Blockdefinitionen innerhalb einer Zeichnung). Im Dialog wird bei (set_tile "wähleName" (itoa 94)) noch der korrekte Listeneintrag (Blockname) angezeigt (der Listenindex wird programmseitig bestimmt durch Auswählen eines Blocks in der Zeichnung und Ermitteln des Blocknamens), bei (set_tile "wähleName" (itoa 95)) aber nicht mehr. Laut Hilfe sind doch aber max. 32768 Einträge pro Liste zulässig - oder verstehe ich da etwas falsch? Es erfolgt keine Fehlermeldung, das Programm wird auch nicht abgebrochen. Für eine schnelle Hilfe wäre ich sehr dankbar. Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 14. Jun. 2010 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Neumann
|
Uwe Neumann Mitglied
Beiträge: 18 Registriert: 13.12.2002
|
erstellt am: 14. Jun. 2010 10:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Heiko, ich habe folgenden Code: (set_tile "wähleName" (itoa (c:myLibFunc_getListIndex (nth 2 EigList) BlockDefListe))) Die Funktion c:myLibFunc_getListIndex liefert mir eine Integerzahl, die der Position des Namens in der Liste entspricht. (defun c:myLibFunc_getListIndex (LiElem Li / ) (if (= (type Li) 'LIST) (if (member LiElem Li) (- (length Li) (length (member LiElem Li))))) ) ;End of LibFunction myLibFunc_getListIndex Benenne ich den Block um, so dass der Name am Anfang der Liste mit den Blocknamen steht, funktioniert das Ganze und in der popup_list wird der Blockname angezeigt. Ruscht der Name in der Liste nach unten über eine bstimmte Position hinaus, wird der Name nicht mehr angezeigt. Uwe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 14. Jun. 2010 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Neumann
Hallo Uwe, so ganz habe ich Dein Problem noch nicht erkannt, aber ich würde auf jeden Fall noch ein IF mehr verwenden: (if (setq n(c:myLibFunc_getListIndex (nth 2 EigList) BlockDefListe)) (set_tile "wähleName" (itoa n))) Wenn nämlich sonst Deine Funktion ein NIL zurückgibt (wenn das Listenelement nicht gefunden wird oder es keine Liste ist) läuft ITOA in einen Fehler: Fehlerhafter Argumenttyp: fixnump: nil Aber ich denke das ist nicht Dein Problem.
------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe Neumann Mitglied
Beiträge: 18 Registriert: 13.12.2002
|
erstellt am: 14. Jun. 2010 12:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, du hast Recht - das <if> löst nicht mein Problem. Ich will mal versuchen, das Probblem etwas ausführlicher zu schildern. Ich definiere mir eine Liste mit allen Blocknamen der aktuellen Zeichnung. Für bestimmte Blöcke, möchte ich diverse Aktionen durchführen. Der Nutzer hat zum Bilden des Auswahlsatzes für diese Aktionen eine Dialogbox und in dieser die Möglichkeit, entweder Blöcke eines Layers, eines Namens usw. auszuwählen. Somit dürfte also sichergestellt sein, dass bei Auswahl über den Namen dieser auch in der vorher gebildeten Liste ist. Die Liste der Blocknamen ist sortiert. Wähle ich nun ein Blockelement aus und ermittle den Blocknamen, so wird in der popup_list des Dialogs zur Generierung des Auswahlsatzes genau dieser Name angezeigt. Das funktioniert auch ohne Probleme. Aber wenn die Liste recht lang ist, passiert es halt, dass nach Auswahl eines Blockes und Bestimmung des Namens das Feld leer ist - die Liste ist aber hinterlegt, so dass ich manuell einen Namen auswählen kann. Das tritt aber eben nicht immer auf. Wird ein Block mit einem Namen gewählt, der relativ weit vorne in der Liste steht, so wird dieser Name im Feld auch ausgewiesen. Steht der Name des gewählten Blockes relativ weit hinten in der Liste, wird kein Wert angezeigt - und das, obwohl die Liste kein Leerelement enthält. Vielleicht ist mein Problem jetzt etwas deutlicher geworden. Bis zum 95. Element der Liste erfolgt die Anzeige im popup_list-Feld korrekt, ab dem 96. Element nicht mehr. Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 14. Jun. 2010 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Neumann
|
Uwe Neumann Mitglied
Beiträge: 18 Registriert: 13.12.2002
|
erstellt am: 14. Jun. 2010 15:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, vielen Dank für deine Hilfe. Wenn ich deinen Code erweitere um die Objektauswahl eines Blockes zur Ermittlung des Namens, wird dann im Dialog auch der korrekte Listenwert angezeigt. Muss noch mal meinen Code im Detail durchgehen, warum bei größeren Listen das Problem auftritt. Uwe Anmerkung: Fehler gefunden - Das Problem war eine falsche Reihenfolge von set_tiel und start_list. Warum es bei kleineren Listen funktioniert hat, weiß ich noch nicht - aber jetzt läuft es generell! [Diese Nachricht wurde von Uwe Neumann am 14. Jun. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |