Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Symboltabellen und das Ende!

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:  Symboltabellen und das Ende! (563 mal gelesen)
Big Sven
Mitglied
Techn. Angestellter


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

Beiträge: 129
Registriert: 14.09.2005

HP Book
Intel Core i7 2,9GHz
32GB RAM
Nvidia Quadro M2200
Windows 10 Pro
AutoCAD 2018

erstellt am: 14. Sep. 2005 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

Hallo Forum!
Ich bin hier neu angemeldet und komme gleich mit einem kleinen Problem. Ich habe in einer DWG mehrere Blöcke, in denen ich die Farbe von Rechtecken (LWPolylinien) abändern muss. Ich bin mit tblnext jeweils in den ersten Eintrag der Datenbank gegangen und hangel mich dann mit (setq x (entget (entnext (cdr (assoc -1 xy))))) im Block nach unten, bis ich die richtigen Polylinien finde. Leider gibt mir ACAD aber auf diesem Weg kein Ende (z. B. SEQEND) wieder, so das mein Programm am Ende einen Fehler bekommt.
Gibt es bei diesem Weg kein zu erwartenes Ende? Ich hoffe es hat jemand einen Tipp für mich! Vielen Dank!
Gruß Sven

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 14. Sep. 2005 16:40    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 Big Sven 10 Unities + Antwort hilfreich

guck dir mal folgenden Konstrukt an:
(if(setq BLOCKDEF (tblsearch "BLOCK" BLOCKNAME))      ; Blockdefinition zum Blocknamen auslesen
  (progn             
    (setq BLOCKELEMENT (cdr (assoc -2 BLOCKDEF)))            ; Adresse der Blockelemente holen
    (while BLOCKELEMENT            ; und solange nicht alle Blockelemente abgearbeitet sind ...
      ; Mache was
    )
  )
)


da wird mittels while auf ein Vorhandensein des Elementes getestet.

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 15. Sep. 2005 08:58    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 Big Sven 10 Unities + Antwort hilfreich

@cadmium

(setq BLOCKELEMENT (entnext BLOCKELEMENT ))
nicht vergessen, sonst wunderst dich, warum das Programm nach 5 Tassen Kaffee noch immer läuft

@big sven
(setq block (tblnext "BLOCK" t))
(while block
  (setq blockelem (tblobjname "BLOCK" (cdr (assoc 2 block))))
  (while (setq blockelem (entnext blockelem))

    ; mach was mit blockelem

  )

  (setq block (tblnext "BLOCK"))
)

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 15. Sep. 2005 09:02    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 Big Sven 10 Unities + Antwort hilfreich

@fuchsi .. thx , da hab ich wohl was zuviel gelöscht..

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Big Sven
Mitglied
Techn. Angestellter


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

Beiträge: 129
Registriert: 14.09.2005

HP Book
Intel Core i7 2,9GHz
32GB RAM
Nvidia Quadro M2200
Windows 10 Pro
AutoCAD 2018

erstellt am: 15. Sep. 2005 14: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

Hallo Ihr Beiden!
Der Ansatz ist ja schon mal in Ordnung. Vielen Dank soweit. Aber jetzt kommt ja mein Problem! Wenn ich mich mit:
SETQ BLOCKELEM (ENTGET (ENTNEXT (CDR (ASSOC -1 BLOCKELEM))))
im Block nach unten begebe, dann bekomme ich kein SEQEND zurück, wenn ich am Ende bin. Habt Ihr dafür eine Lösung?

Gruß Sven

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 15. Sep. 2005 14:45    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 Big Sven 10 Unities + Antwort hilfreich

aber ein "nil" am Blockende und das kannste doch genausogut auswerten -> while

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 15. Sep. 2005 15:17    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 Big Sven 10 Unities + Antwort hilfreich

  
Zitat:
Original erstellt von Big Sven:
Hallo Ihr Beiden!
Der Ansatz ist ja schon mal in Ordnung. Vielen Dank soweit. Aber jetzt kommt ja mein Problem! Wenn ich mich mit:
SETQ BLOCKELEM (ENTGET (ENTNEXT (CDR (ASSOC -1 BLOCKELEM))))
im Block nach unten begebe, dann bekomme ich kein SEQEND zurück, wenn ich am Ende bin. Habt Ihr dafür eine Lösung?

Gruß Sven


was ist denn das überhaupt fürn ein Konstrukt
SETQ BLOCKELEM (ENTGET (ENTNEXT (CDR (ASSOC -1 BLOCKELEM))))

der GC -1 ist sowieso immer der ename des eigenen Objektes, wenns hier mit entnext weitertust, bekommst du nur dann eine sequend, wenn die EINFÜGUNG Attribute haben !

du musst, wenn du eine EINFÜGUNGS hast, mit (tblobjname "BLOCK" blockname) erst auf die Blockdefinitions gehen, und hier ein while schleife drüberbauen, solange du elemente erhälst


Verwechsle NIE Ein EINFÜGUNG und eine BLOCKDEFINITION

poste doch mal ein bisserl mehr Code


------------------
    
Ing. Anton Fuchs
WWW.FFZELL.AT.TC

[Diese Nachricht wurde von fuchsi am 15. Sep. 2005 editiert.]

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 15. Sep. 2005 15: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 Nur für Big Sven 10 Unities + Antwort hilfreich

Deutschbuch hat mir sehr gehilft !

Also soviele Rechtschreibfehler hatte ich noch nie in einem Posting.


[EDIT] jetzt bin ich schon relativ lange in diesem Forum, und sehe heute das erste mal, dass man Beiträge editieren kann. Schäm

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

[Diese Nachricht wurde von fuchsi am 15. Sep. 2005 editiert.]

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

Big Sven
Mitglied
Techn. Angestellter


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

Beiträge: 129
Registriert: 14.09.2005

HP Book
Intel Core i7 2,9GHz
32GB RAM
Nvidia Quadro M2200
Windows 10 Pro
AutoCAD 2018

erstellt am: 15. Sep. 2005 16:10    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 fuchsi!

Anscheinend sitzt ich gerade auf irrgendwelchen Körperteilen, die deswegen schlecht durchblutet werden. Also mein Code sieht ungefähr so aus:
(setq block (tblnext "BLOCK" t))
(while block
(setq blk (tblobjname "BLOCK" (cdr (assoc 2 block))))
(while (setq blk (entnext blk))
   (setq blk (entget blk))
   (setq typenpruef (cdr (assoc 0 blk)))
   (if (= typenpruef "LWPOLYLINE")
     (jetzt setze ich die Farbe um)
   );if
  );while
  (setq block (tblnext "BLOCK"))
);while

Mit diesem Gebilde geht er bis zum ersten Eintrag des Blockes (ein Attribut, er besteht aber aus Attributen und Grafik) und hängt sich dann auf, weil er nicht weiter in der Definition nach unten geht !?!?

Gruß Sven

[Diese Nachricht wurde von Big Sven am 15. Sep. 2005 editiert.]

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 16. Sep. 2005 10: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 Big Sven 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Big Sven:
Hallo fuchsi!

Anscheinend sitzt ich gerade auf irrgendwelchen Körperteilen, die deswegen schlecht durchblutet werden. Also mein Code sieht ungefähr so aus:
(setq block (tblnext "BLOCK" t))
(while block
(setq blk (tblobjname "BLOCK" (cdr (assoc 2 block))))
(while (setq blk (entnext blk))
   (setq blk (entget blk))
   (setq typenpruef (cdr (assoc 0 blk)))
   (if (= typenpruef "LWPOLYLINE")
     (jetzt setze ich die Farbe um)
   );if
  );while
  (setq block (tblnext "BLOCK"))
);while

Mit diesem Gebilde geht er bis zum ersten Eintrag des Blockes (ein Attribut, er besteht aber aus Attributen und Grafik) und hängt sich dann auf, weil er nicht weiter in der Definition nach unten geht !?!?

Gruß Sven

[Diese Nachricht wurde von Big Sven am 15. Sep. 2005 editiert.]



der Fehler liegt hier
(setq blk (entget blk))

zuerst ist blk ein ELEMENTNAME nach dieser Anweisung eine ASSOCLISTE mit den Elementdaten.

In der zweiten Schleife
(while (setq blk (entnext blk))
birnts ihn natürlich weil hier blk nunmal kein ELEMENTNAME mehr ist, und entnext verlangt einen solchen

also:
(setq block (tblnext "BLOCK" t))
(while block
(setq blk (tblobjname "BLOCK" (cdr (assoc 2 block))))
(while (setq blk (entnext blk))
  (setq blkdaten (entget blk))
  (setq typenpruef (cdr (assoc 0 blkdaten)))
  (if (= typenpruef "LWPOLYLINE")
    (jetzt setze ich die Farbe um)
  );if
  );while
  (setq block (tblnext "BLOCK"))
);while

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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

Big Sven
Mitglied
Techn. Angestellter


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

Beiträge: 129
Registriert: 14.09.2005

HP Book
Intel Core i7 2,9GHz
32GB RAM
Nvidia Quadro M2200
Windows 10 Pro
AutoCAD 2018

erstellt am: 16. Sep. 2005 12:00    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 fuchsi!
Vielen Dank jetzt klappt es super! Ich habe mit diesen Befehlen (tblnext, tblobjname) noch nichts gemacht, aber jetzt bin ich schon wieder etwas schlauer.
Gruß Sven

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