Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Liste aller Entitätsnamen innerhalb der Blocktabelle

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:  Liste aller Entitätsnamen innerhalb der Blocktabelle (3277 mal gelesen)
S.Langhammer
Mitglied


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

Beiträge: 8
Registriert: 22.01.2013

erstellt am: 30. Jan. 2013 10: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

Der Betreff verrät bereits, was ich suche.
Wie sehe eine Möglichkeit aus, die Entitätsnamen (DXF Group Code -1) aller Blocke in der Blocktabelle zu erhalten?
Mein bisheriger Versuch basiert auf einem Code-Beispiel, das ich bei afranlisp gefunden habe. Genauer gesagt von hier:
http://www.afralisp.net/autolisp/tutorials/into-the-database.php
Nur wurde im Beispiel die Layer-Liste bearbeitet. Ich bin zunächst davon ausgegangen, ich könnte das Beispiel einfach für Blöcke umstricken und zwar dazu:

(defun blockEntityList(/ f t1)
(princ "blockEntityList aufgerufen \n")
(setq blkEntList(list))

(setq f 1) ;rewind pointer

(while ;start while loop
    (setq t1 (tblnext "block" f)) ;get the next block
  (setq f nil) ;reset pointer
  (setq b (cdr (assoc -2 t1))) ;get the inserts/blocks name
    (if (/= b nil) ;if entity name is not equal to nil
      (setq blkEntList (append blkEntList (list b))) ;Add the blocks entity name to the list
    );if
);while
blkEntList
) ;;; ende blockEntityList
;

Nur leider gibt mir das Ganze hier keineswegs nur die Entitätsnamen der Blöcke in der Blocktabelle. Bin ich zumindest auf dem richtigen Weg oder hat jemand eine bessere Lösung für mich, die wirklich eine Liste aller Entitätsnamen ausgibt, die wirklich NUR auf Blöcke zeigen?

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 30. Jan. 2013 11:29    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 S.Langhammer 10 Unities + Antwort hilfreich

So:

(defun blockEntityList (/ t1 blkEntList)
  (princ "blockEntityList aufgerufen \n")

  (while ;start while loop
    (if (setq t1 (tblnext "block" (null t1))) ;get the next block
      (setq blkEntList
    (cons (tblobjname "BLOCK" (cdr (assoc 2 t1)))
  blkEntList
    )
      )
;Add the blocks entity name to the list
    ) ; if
  ) ;while
  (reverse blkEntList)
)
;;; ende blockEntityList

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 30. Jan. 2013 11: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 Nur für S.Langhammer 10 Unities + Antwort hilfreich

Hierbei ist aber noch zu bedenken, dass in der Blocktabelle auch die ganzen anonymen Blöcke stehen, d. h. unter anderem alle Bemaßungen usw.
Also ggf. noch die Blöcke mit Namen *irgendwas rausfiltern.

Gruß
Thomas

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 30. Jan. 2013 12:03    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 S.Langhammer 10 Unities + Antwort hilfreich

Wenn ich das richtig herauslese mußt du für dich, und somit dann auch für uns,
zunächst mal in Ruhe überlegen ob du Objektnamen von Blöcken(BLOCK) benötigst,
oder von Blockreferenzen(INSERT).

Wenn das geklärt ist kann man das Problem gezielt angehen.
( eine Überleitung vom Link zu deinem geschilderten Vorhaben hat sich mir leider nicht offenbart )

Für die Blocktabelle könnte es so aussehen:

(defun GET_TABLEITEMS ( / TBLITEM REVAL)
  (while (setq TBLITEM (tblnext "BLOCK" (null TBLITEM)))
    (setq REVAL (cons (tblobjname "BLOCK" (cdr(assoc 2 TBLITEM))) REVAL))
  )
  REVAL
)

(GET_TABLEITEMS)

Etwas flexibler für Tabelleneinträge so:

(defun GET_TABLEITEMS (TABLENAME / TBLITEM REVAL)
  (while (setq TBLITEM (tblnext TABLENAME (null TBLITEM)))
         (setq REVAL (cons (tblobjname TABLENAME (cdr(assoc 2 TBLITEM))) REVAL))
  )
  REVAL
)

(GET_TABLEITEMS "LAYER")

Allerdings hat diese Funktion sicher keinen besonderer Nutzen,
wenn dann würde man es wohl noch allgemeingültiger formulieren:


(defun GET_TABLEITEMS (TABLENAME DXFcode / TBLITEM REVAL)
  (while (setq TBLITEM (tblnext TABLENAME (null TBLITEM)))
         (if (and
           (not(wcmatch (cdr(assoc 2 TBLITEM)) "`*D*,*|*")) ; DIMENSION- & XREF-Blocks filtern
           (assoc DXFcode (setq TBLitem (entget(tblobjname TABLENAME (cdr(assoc 2 TBLITEM))))))
      )
             (setq REVAL (cons (cdr(assoc DXFcode TBLITEM)) REVAL))
         )
  )
  REVAL
)

(GET_TABLEITEMS "LAYER" -1)

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

[Diese Nachricht wurde von cadffm am 31. Jan. 2013 editiert.]

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

S.Langhammer
Mitglied


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

Beiträge: 8
Registriert: 22.01.2013

erstellt am: 30. Jan. 2013 16:16    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

@Andreas
Erstmal danke aber, hab ich bei dem Ansatz generell was falsch verstanden, oder soll das nur einen Entitätsnamen ausspielen?

Nur falls ich missverständlich war, was ich am ende brauche ist so eine Liste: (1.Entitätsname 2.Entitätsname [...] N.Entitätsname)

@cadffm
Den Link hab ich nur angegeben um zu zeigen woher ich die Idee für den ersten Ansatz her hatte. Im Abschnit Into the Database - Part 3 steht unter "Now the AutoLisp Coding :" Code um sämtliche Layernamen auszulesen, ich bin davon ausgegangen, dass mit Blöcken analog machen zu können.

Ich gehe davon aus die tatsächlichen Blöcke auslesen zu müssen, da diesen, so wie ich das in der Eile der Stunde verstanden habe, eine Liste der Entitäten anhängt, die sie beinhalten.
Die Blockreferenzen, die ja wohl "nur" darauf hinweisen, wo sich der jeweilige Block im Raum befindet, wie er gedreht und Skaliert ist, kann ich dann sicher wie jede andere Entität aus der Liste der im Modelspace befindlichen Entitäten, bzw. der Subentitätenliste eines Blocks, auslesen.
Deine Codebeispiele muss ich mir noch ansehen, ich melde mich, wenn ich das habe und zu welchen Ergebnis ich gekommen bin.

Noch ein kleines Geständnis: was Lisp und CAD generell angeht bin ich noch ziemlich grün hinter den Ohren, also bitte nochmal Nachsicht walten lassen, wenn ich mich manchmal ein wenig dumm anstelle und Anfängerfragen stelle.

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 30. Jan. 2013 16:27    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 S.Langhammer 10 Unities + Antwort hilfreich


Zitat:
Erstmal danke aber, hab ich bei dem Ansatz generell was falsch verstanden, oder soll das nur einen Entitätsnamen ausspielen?

Nur falls ich missverständlich war, was ich am ende brauche ist so eine Liste: (1.Entitätsname 2.Entitätsname [...] N.Entitätsname)


Wird doch auch so gemacht  :

Befehl: (BLOCKENTITYLIST)
blockEntityList aufgerufen
(<Objektname: 7ffff705af0> <Objektname: 7ffff705f30> <Objektname: 7ffff3c7180> )

Ich hoffe du hast nicht nur Codeteile verwendet. Es kommt darauf an dass die beiden Variablen t1 und blkEntList "Lokal" sind.
Deshalb stehen sie in dieser Zeile "(defun blockEntityList (/ t1 blkEntList)" auch hinter dem / in der Variablenliste.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 31. Jan. 2013 00:42    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 S.Langhammer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadffm:

Wenn ich das richtig herauslese mußt du für dich, und somit dann auch für uns,
zunächst mal in Ruhe überlegen ob du Objektnamen von Blöcken(BLOCK) benötigst,
oder von Blockreferenzen(INSERT).



Ich erweitere um 2 :
Ob es dir um BLOCKs, INSERTs oder um die Objekte in einem Block, oder zuletzt: Ob es sich um Attribute von Blockreferenzen dreht.
Noch immer fehlt die Info was du vorhast, dann könnte man sich als Helfer die Frage selbst beantworten.


------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

[Diese Nachricht wurde von cadffm am 31. Jan. 2013 editiert.]

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

S.Langhammer
Mitglied


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

Beiträge: 8
Registriert: 22.01.2013

erstellt am: 31. Jan. 2013 08:20    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

Ganz zum Schluss will ich eine Datei erzeugt haben, in der alle Informationen, die ich benötige, über die Entitäten in einer Zeichnung (.dwg Datei), stehen.
So nun bevor ich irgendetwas Anderes aus der eigentlichen Zeichnung auslese  will ich sämtliche Blöcke aus der Blocktabelle auslesen. Wie ich an die eigentlichen Informationen des Blocks rankomme weiß ich schon. Mein Problem momentan ist es, eine Liste der Entitätsnamen (nicht die Blocknamen) der Blöcke anzulegen. Damit mein ich DXF Group Code -1 so wie es hier ( http://www.autodesk.com/techpubs/autocad/acad2000/dxf/common_group_codes_for_entities_dxf_06.htm ) aufgeführt ist. Auf die einzelnen Entitäten kann ich mit Hilfe des namens und entget zugreifen, der Punkt stellt für mich kein Hindernis mehr dar.
Tut mir leid wenn ich mich bislang ziemlich unklar ausgedrückt habe, das ist ein Allgemeines Problem von mir. ^^'

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 31. Jan. 2013 08:54    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 S.Langhammer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von S.Langhammer:
Ganz zum Schluss will ich eine Datei erzeugt haben, in der alle Informationen, die ich benötige, über die Entitäten in einer Zeichnung (.dwg Datei), stehen.

Dann speichere die Zeichnung doch einfach im dxf-Format, da stehen dann alle Informationen drin.

Mal im Ernst, Du hast immer noch nicht gesagt, welche Informationen Du brauchst und was Du damit letztendlich machen willst. Der Elementname (GC Code -1 bei Elementen, -2 bei Blöcken) ist ja nur in der aktuellen Zeichnung relevant. Und ob Du über den oder über den Blocknamen auf die Blockdefinition zugreifst, sollte egal sein, da die Blocknamen ja auch eindeutig sind (und es beim Schließen und wieder Öffnen der Datei auch bleiben).

Gruß
Thomas

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

S.Langhammer
Mitglied


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

Beiträge: 8
Registriert: 22.01.2013

erstellt am: 31. Jan. 2013 10: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

Ich schreibe das Lisp Script, damit die Firmensoftware die Informationen in einer bestimmten Form auslesen kann. Einen Import für DXF Dateien haben wir schon nur der is wohl Mistig. Die Datei, in die die Infos ausgespielt werden soll ist auch bloß temporär.
Ich brauche den Elementnamen doch auch nur um, während die Zeichnung geöffnet ist, während das Lisp-Script läuft mit entget auf die Entität zugreifen zu können und dann beispielsweise mit (setq entLay(cdr(assoc 8 enlist))) den Layer oder mit entsprechend anders nummerierten Funktionen andere Informationen auszulesen.
Wie ich an die Informationen die ich will rankomme, sowie ich den Elementnamen habe weiß ich bereits, das ist grade auch absolut nicht relevant.
Welche Informationen das sind ist grade auch nicht relevant.
Was für mich grade nur relevant ist, ist irgendwie an eine Liste der Elementnamen der Blöcke ranzukommen. Das schein ich derzeit nicht auf die Reihe zu kriegen.

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: 31. Jan. 2013 10: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 S.Langhammer 10 Unities + Antwort hilfreich

nochmal

(defun GETBLOCKENTS(NAME / LISTE) 
  (if (and (=(type NAME) 'STR)
          (setq OBJEKT (tblobjname "BLOCK" NAME))         
      )  
    (progn
      (setq BLOCKDATA(entget OBJEKT '("*")))
      (while (setq OBJEKT (entnext OBJEKT))
        (setq LISTE(cons OBJEKT LISTE))       
      )
      (list NAME (reverse LISTE))
    ) 
  ) 
)

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - 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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 31. Jan. 2013 11: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 S.Langhammer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von S.Langhammer:
Was für mich grade nur relevant ist, ist irgendwie an eine Liste der Elementnamen der Blöcke ranzukommen.

Naja, und genau dass bekommt Du doch, wenn Du mit (tblnext "block") durch die Blocktabelle läufst.
Ob Du dann mit (assoc -2 ...) oder (tblobjname "block" (cdr (assoc 2 ...))) die Elementnamen holst, hängt von Deiner weiteren Vorgehensweise ab.
ABER:  In der Blocktabelle sind auch z. B. Bemaßungen (Blockname *Dnummer) und ggf. andere annonyme Blöcke drin. Hier müsstest Du dann ansetzen, wenn Du diese nicht haben willst. Und das geht dann denke ich eher über den Blocknamen.

Gruß
Thomas

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 31. Jan. 2013 12:34    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 S.Langhammer 10 Unities + Antwort hilfreich

Malen nach Zahlen:

Code:

(foreach BNAME (GET_TABLEITEMS "BLOCK" 2)
    (setq MyList (cons (GETBLOCKENTS BNAME) MyList))
)

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

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