Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Problem bei Routine zum Durchsuchen einer Entity-Liste

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Problem bei Routine zum Durchsuchen einer Entity-Liste (861 mal gelesen)
C. Wincziers
Mitglied
Tech. Zeichner


Sehen Sie sich das Profil von C. Wincziers an!   Senden Sie eine Private Message an C. Wincziers  Schreiben Sie einen Gästebucheintrag für C. Wincziers

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 06. Mai. 2004 16:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für C. Wincziers 10 Unities + Antwort hilfreich

(if (member(cdar bementlist) 
'("AcDb3PointAngularDimension" "AcDb2LineAngularDimension"))
(progn.....

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für C. Wincziers 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von C. Wincziers an!   Senden Sie eine Private Message an C. Wincziers  Schreiben Sie einen Gästebucheintrag für C. Wincziers

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von C. Wincziers an!   Senden Sie eine Private Message an C. Wincziers  Schreiben Sie einen Gästebucheintrag für C. Wincziers

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 06. Mai. 2004 16:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für C. Wincziers 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von C. Wincziers an!   Senden Sie eine Private Message an C. Wincziers  Schreiben Sie einen Gästebucheintrag für C. Wincziers

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für C. Wincziers 10 Unities + Antwort hilfreich

C. Wincziers
Mitglied
Tech. Zeichner


Sehen Sie sich das Profil von C. Wincziers an!   Senden Sie eine Private Message an C. Wincziers  Schreiben Sie einen Gästebucheintrag für C. Wincziers

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz