| | | 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 – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Problem bei Routine zum Durchsuchen einer Entity-Liste (958 mal gelesen)
|
C. Wincziers Mitglied Tech. Zeichner
Beiträge: 28 Registriert: 04.01.2001 Software: AutoCAD 2000, Genius 14, AutoCAD Mech. 2000 PP, Windows 2000 Prof. Hardware: PIII 850 MHz, 512 MB Ram, Matrox G450 DH
|
erstellt am: 06. Mai. 2004 16:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe ein Problem mit einer Lisproutine. Ich möchte damit eigentlich nur überprüfen, ob das das angewählte Element vom Typ Winkelbemaßung ist oder nicht und dann jeweils eine bestimmte Aktion starten, welche wiederum Auswirkungen auf ein Dialogfenster hat: Hier mal der Ausschnitt: ;Nimm 2. Wert aus Dotted-Pair und speichere Ihn in Variable (setq bemlaengstil (cdr (assoc 42 elist))) ;fülle Variable mit Entity-Liste des Objekts (setq bementlist elist) ;zur Sicherheit noch auf nil (setq bemalist nil) ;mit assoc alle zutreffenden (hier DXF-Code 100) Werte filtern... (while (setq bementlist (member (assoc 100 bementlist)bementlist)) .....HIER BEGINNT DAS PROBLEM..... ;...und wenn dieser Wert gleich einer der beiden Strings ;"AcDb.....Dimension" ist... (if (= (cdar bementlist) (or "AcDb3PointAngularDimension" "AcDb2LineAngularDimension")) ;...setze Variable positiv (setq bemalist T)) ;nächsten Teil der Liste speichern und zurück zur while-Schleife (setq bementlist (cdr bementlist)) );endif ;prüfen, ob einer der beiden Strings "AcDb.....Dimension" ;enthalten war, (if bemalist ;dann rechnen und an DCL übergeben (progn (setq bemlaengstil (/ (* bemlaengstil 180) pi)) (set_tile "bemlaeng" (rtos bemlaengstil)) );endprogn ;sonst nur den Wert an DCL (set_tile "bemlaeng" (rtos bemlaengstil)) );endif Etwas ausführlich, aber so ist dieser Teil einer Funktion für mich einigermaßen nachzuvollziehen, deshalb seht es mir nach, wenn einiges sehr umständlich programmiert erscheint. Das Problem ist nun, das ACAD meine Abfrage, ob die Variable "bementlist" mit den Werten "AcDb"-irgendwas gefüllt ist immer mit einem quasi "nein" beantwortet wird, obwohl in "bementlist" sehr wohl der String "AcDb....Dimension" gespeichert wurde, wenn ich eine Winkelbemaßung auswähle (habe ich überprüft, als ich mal den Inhalt der Variablen zur Zeit der Prüfung abgefragt habe). Was läuft da falsch ? Ich hoffe, das war nicht zu kompliziert. Ich komme aber in dieser Stelle echt nicht weiter. Wäre schön, wenn sich einer melden könnte, um mich auf den Fehler hinzuweisen. Mit freundlichen Grüßen, Christian Wincziers Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Mai. 2004 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für C. Wincziers
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 06. Mai. 2004 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für C. Wincziers
Hi Christian, habe nur einen zugegeben etwas flüchtigen Blick darauf geworfen. Da ist ein Fehler, der sofort ins Auge springt: (if (= (cdar bementlist) (or "AcDb3PointAngularDimension" "AcDb2LineAngularDimension")) So geht's natürlich nicht, denn zuerst wird dieser Ausdruck ausgewertet: (or "AcDb3PointAngularDimension" "AcDb2LineAngularDimension") Das ergibt immer T, da Strings grundsätzlich als T evaluiert werden (da sie nämlich ungleich nil sind). Das müsste also so lauten: (if (or (= (cdar bementlist) "AcDb3PointAngularDimension")) (= (cdar bementlist) "AcDb2LineAngularDimension")) ) Das Hauptproblem sehe ich aber darin, dass die 100er GCs mehrfach vorkommen und daher als Assoc-Key nicht verwendet werden dürfen (assoc 100 ...) gibt da grundsätzlich den ersten Wert zurück, der dann wohl immer (100 . "AcDbEntitity") lautet. In diesem Fall also nicht assoc verwenden, sondern member. (if(or(member'(100 . "AcDb3PointAngularDimension")) (member'(100 . "AcDb3LineAngularDimension"))) Das sollte für deine Zwecke funktionieren. HTH, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C. Wincziers Mitglied Tech. Zeichner
Beiträge: 28 Registriert: 04.01.2001 Software: AutoCAD 2000, Genius 14, AutoCAD Mech. 2000 PP, Windows 2000 Prof. Hardware: PIII 850 MHz, 512 MB Ram, Matrox G450 DH
|
erstellt am: 06. Mai. 2004 16:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadwiesel, uff, das ging aber schnell. Und geholfen hat es (natürlich) auch, aber mich würde interessieren, warum mein Konstrukt nicht so funktioniert, wie es soll. Du hast ja mein Problem mit "member" nur umgangen....(dafür danke ich Dir aber recht herzlich). Mit freundlichen Grüßen, Christian Wincziers Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C. Wincziers Mitglied Tech. Zeichner
Beiträge: 28 Registriert: 04.01.2001 Software: AutoCAD 2000, Genius 14, AutoCAD Mech. 2000 PP, Windows 2000 Prof. Hardware: PIII 850 MHz, 512 MB Ram, Matrox G450 DH
|
erstellt am: 06. Mai. 2004 16:39 <-- editieren / zitieren --> Unities abgeben:
Hallo mapcar, hehe, Du warst schneller als ich mit meiner Antwort zu Cadwiesels Beitrag. Klar, jetzt erkenne ich meinen Fehler bezüglich der falschen Stelle von "or" auch.....es ist so simpel. Danke also nochmals an euch beide. Mit freundlichen Grüßen, Christian Wincziers Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Mai. 2004 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für C. Wincziers
Hilft dir in dem fall nicht der GC 70 weiter? Habs nur mal kurz ausprobiert aber das ist ein unterschied zwischen den verschiedenen bemarten (70 . 34) ->(100 . "AcDb2LineAngularDimension") (70 . 33) ->(100 . "AcDbAlignedDimension") (70 . 32) ->(100 . "AcDbAlignedDimension")(100 . "AcDbRotatedDimension") ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C. Wincziers Mitglied Tech. Zeichner
Beiträge: 28 Registriert: 04.01.2001 Software: AutoCAD 2000, Genius 14, AutoCAD Mech. 2000 PP, Windows 2000 Prof. Hardware: PIII 850 MHz, 512 MB Ram, Matrox G450 DH
|
erstellt am: 06. Mai. 2004 17:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadwiesel, ja, hatte ich auch schon probiert. Das sind Bitwerte für die Bemaßungstypen (u.A. auch für eine individuelle Position der Bemaßung usw.). Wie ich allerdings diesen Bitwert in Lisp so herunterrechne, das ich damit auf meine benötigten Bitwerte von 1....5 komme, weiß ich nicht. Das müßte ja irgendwie mit Ganzzahlen gehen..... Mit freundlichen Grüßen, Christian Wincziers Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 06. Mai. 2004 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für C. Wincziers
|
C. Wincziers Mitglied Tech. Zeichner
Beiträge: 28 Registriert: 04.01.2001 Software: AutoCAD 2000, Genius 14, AutoCAD Mech. 2000 PP, Windows 2000 Prof. Hardware: PIII 850 MHz, 512 MB Ram, Matrox G450 DH
|
erstellt am: 07. Mai. 2004 09:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Marc, mensch, klasse, da tun sich ja Quellen auf......! Jetzt habe ich wieder was zum Stöbern. Nochmals danke an alle. Und da ich lange nicht mehr hier war, hätte ich beinahe die Unities vergessen, wird sofort nachgeholt. Mit freundlichen Grüßen, Christian Wincziers Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|