Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Block suchen und ersetzen

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:  Block suchen und ersetzen (5162 mal gelesen)
Kelme
Mitglied



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

Beiträge: 33
Registriert: 16.03.2004

erstellt am: 03. Jun. 2004 09: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

Grüßt euch!

Kann man einen Block suchen und durch einen anderen ersetzen?

Z.B. alle Blöcke A durch Block B ersetzen.


Gruß

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

Brischke
Ehrenmitglied V.I.P. h.c.
CAD on demand GmbH



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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 03. Jun. 2004 09:15    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 Kelme 10 Unities + Antwort hilfreich

Hallo Kelme,

Standardantwort: CADwiesel.de
Und falls du etwas spezielles benötigst, einen Blocktausch im Batchbetrieb (alle Blöcke in einem Verzeichnis gegen gleichnamige in der Zeichnung) oder mit Attributübernahme (auch bei unterschiedlicher Benennung) dann kannst du dich gerne bei mir melden.

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich!

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

Hendrichs
Mitglied
Bauzeichner


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

Beiträge: 61
Registriert: 16.09.2002

erstellt am: 03. Jun. 2004 09: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 Kelme 10 Unities + Antwort hilfreich

hallo Kelme

wenn die Expresstools installiert sind dan gehts auch mit dem befehl "blockreplace"

gruss

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

grüße
Hendrichs

Habe keine Angst vor der Zukunft
Et kütt wie et kütt

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: 03. Jun. 2004 10:38    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 Kelme 10 Unities + Antwort hilfreich

Hi,
ja Express-Tools hätte ich jetzt auch vorgeschlagen.
Oder mit Hilfe dieses Lisp-Krams von mir:
Programmaufruf z.B.:
(MS:BLREPLACE "Neuer-Blockname" (list 'MS:SSGET "Blöcke wählen die ausgetauscht werden sollen: " '((0 . "Insert") (2 . "Block-name-zum-Tauschen"))))

An obigem Aufruf mußt Du nur noch Deine Blocknamen eintragen:
"Neuer-Blockname" = Name des neuen Blocks
"Block-name-zum-Tauschen" = Filterbedingung für Selection, kann auch mehrere Blöcke definieren. z.B. "lampe,verteiler,muffe,kasten*" Wildcards sind zulässig.

Ich habe die u.a. Funktionen aus meiner Bibliothek rausgelöst, wenn was fehlt, poste hier.

Code:

;; Funktion zum Blocktauschen
;; wobei eventuell vorhandene Attributwerte
;; soweit möglich übernommen werden
;; Argumente:
;; NEWBNAME = String, Name des NEUEN Blocks
;; SELECTFUNCTION = Funktion zum Selektieren der auszutauschenden Blöcke
;;   (hier sollte auch die Filtermöglichkeit gegeben werden)
;; z.B. (list 'MS:SSGET "Bitte wählen" '((0 . "Insert") (2 . "l_lampe")))
;;
;; Beispiel:
;; (MS:BLREPLACE "l_lampe2" (list 'MS:SSGET "Bitte wählen" '((0 . "Insert") (2 . "l_verteiler"))))
;; oder gekapselt:
;; (MS:SAFE-EVAL (list 'MS:BLREPLACE "l_lampe2" (list 'MS:SSGET "Bitte wählen" '((0 . "Insert") (2 . "l_verteiler")))))
(defun MS:BLREPLACE
                    (NEWBNAME SELECTFUNCTION / SGET)
  (if (setq SGET (MS:SAFE-EVAL SELECTFUNCTION))
    (if (MS:SAFE-EVAL (list 'MS:BLOCKREPLACE-BASE NEWBNAME SGET))
      (princ (strcat "\nOK, >"
                    (itoa (sslength SGET))
                    "< Block/Blöcke ausgetauscht."
            ) ;_ end of strcat
      ) ;_ end of princ
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun

(defun MS:BLOCKREPLACE-BASE
      (NEWBNAME SELSET / BNAMENEU NEWENT OLDENT SGET)
  (MS:SAVEVARS '(("cmdecho" . 0)("cmddia" . 0)("attdia" . 0)("attreq" . 0)("filedia" . 0)) 'varsave)
  (if (not (setq BNAMENEU (BLOCKNAME-REAL-CASE NEWBNAME))) ;_ Ziel-Block überhaupt vorhanden?
    (setq BNAMENEU (MS:BLOCK-IMPORT NEWBNAME)) ;_ Wenn nicht existent, importiere ihn
  ) ;_ end of if
  (if BNAMENEU
    (if (setq SGET (DT:SELSET->VLA-OBJECTLIST SELSET))
      (progn
        (setq SGET (mapcar (function (lambda (X)
                                      (cons X
                                            (VLAX*GET-PROPERTIES
                                              X
                                              '(HYPERLINKS
                                                INSERTIONPOINT
                                                LAYER
                                                LINETYPE
                                                LINETYPESCALE
                                                LINEWEIGHT
                                                NORMAL
                                                PLOTSTYLENAME
                                                ROTATION
                                                TRUECOLOR
                                                VISIBLE
                                                XSCALEFACTOR
                                                YSCALEFACTOR
                                                ZSCALEFACTOR
                                                ) ;_ end of Hyperlinks
                                            ) ;_ end of VLAX*GET-PROPERTIES
                                      ) ;_ end of cons
                                    ) ;_ end of lambda
                          ) ;_ end of function
                          SGET
                  ) ;_ end of mapcar
        ) ;_ end of setq
        (foreach ELEM SGET
          (command "_.-insert" BNAMENEU "0,0,0" "" "" "") ;_neues Objekt einfügen
          (setq NEWENT (entlast) ;_ Objectname speichern
                OLDENT (car ELEM) ;_ Alten Objectname speichern
          ) ;_ end of setq
          (ATT-CLONE-WITHOUT OLDENT NEWENT NIL) ;_ Attribute Klonen
          (VLAX*PUT-PROPERTIES NEWENT (cdr ELEM)) ;_ Eigenschafen des alten Elements übertragen
          (DT:VLAX-DELETE OLDENT) ;_ altes element löschen
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of if
  (MS:RESTOREVARS 'varsave)
  SGET
) ;_ end of defun

(defun MS:BLOCK-IMPORT (BNAME / BNAMENEW)
  (MS:SAVEVARS '(("cmdecho" . 0)("cmddia" . 0)("attdia" . 0)("attreq" . 0)("filedia" . 0)) 'varsave)
  (if (not (setq BNAMENEW (BLOCKNAME-REAL-CASE BNAME)))
    (if (not
          (setq BNAMENEW (car (FIND-FILES (list (strcat BNAME ".dwg")))))
        ) ;_ end of not
      (princ (strcat "\nKein Block >"
                    BNAME
                    "< im AutoCAD-Suchpfad gefunden!"
            ) ;_ end of strcat
      ) ;_ end of princ
      (progn
        (command "_.-insert" BNAMENEW "0,0,0" "" "" "")
        (entdel (entlast))
        (setq
          BNAMENEW (BLOCKNAME-REAL-CASE (vl-filename-base BNAMENEW))
        ) ;_ end of setq
      ) ;_ end of progn

    ) ;_ end of if
  ) ;_ end of if
  (MS:RESTOREVARS 'varsave)
  BNAMENEW
)

(defun BLOCKNAME-REAL-CASE (BNAME / RETVAL)
  (if (not (setq RETVAL (tblsearch "block" BNAME)))
    (princ
      (strcat "\nKein Block >"
              BNAME
              "< in aktueller Zeichnung definiert!"
      ) ;_ end of strcat
    ) ;_ end of princ
    (setq RETVAL (cdr (assoc 2 RETVAL)))
  ) ;_ end of if
  retval
) ;_ end of defun

;; Argumente:
;; FROMOBJ = Ename oder vla-objekt
;; TOOBJ = Ename oder vla-objekt
;; WITHOUTLIST = Liste mit Key-Werten, die nicht übertragen werden sollen z.B.: '("ID" "NR")
(defun ATT-CLONE-WITHOUT (FROMOBJ TOOBJ WITHOUTLIST / LST)
  (if (not (HASATTRIBUTES? FROMOBJ))
    (princ "\nQuell-Objekt besitzt keine Attribute.")
    (if (setq LST (ALL-BL-TXT FROMOBJ))
      (if (not
            (setq
              LST (vl-remove-if
                    (function (lambda (X) (member (car X) WITHOUTLIST)))
                    LST
                  ) ;_ end of vl-remove-if
            ) ;_ end of setq
          ) ;_ end of not
        (princ "\nKeine GÜLTIGEN Attribute zum Übertragen gefunden."
        ) ;_ end of princ
        (if (not (HASATTRIBUTES? TOOBJ))
          (princ "\nZiel-Objekt besitzt keine Attribute.")
          (if (not (ED-ATT2 LST TOOBJ))
            (princ "\nNichts verändert.")
            (princ "\nOK, Attributwerte übertragen.")
          ) ;_ end of if
        ) ;_ end of if
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun

;;; Funktion durchsucht den Block, der über ename übergeben wird,
;;; nach ATTRIB's und erzeugt 'ne Textliste
;;; Retval: Liste der Texte oder nil
;; Hier vl-Version
(defun ALL-BL-TXT (ENAME / EDATA RETVAL ATTS)
  (setq ENAME  (->VLA-OBJECT ENAME)
        RETVAL '() ;_ Liste initialiseren
  ) ;_ end setq
  (if (= (VLAX*GET-PROPERTY ENAME 'HASATTRIBUTES) :vlax-true)
    (progn
      (setq ATTS (vlax-safearray->list
                  (vlax-variant-value
                    (vlax-invoke-method ENAME 'GETATTRIBUTES)
                  ) ;_ end of vlax-variant-value
                ) ;_ end of vlax-safearray->list
      ) ;_ end of setq
      (while ATTS
        (setq RETVAL
              (cons (cons
                      (VLAX*GET-PROPERTY (car ATTS) 'TAGSTRING)
                      (VLAX*GET-PROPERTY (car ATTS) 'TEXTSTRING)
                    ) ;_ end of cons
                    RETVAL
              ) ;_ end of cons
        ) ;_ end of setq
        (setq ATTS (cdr ATTS))
      ) ;_ end of while
      (setq RETVAL (reverse RETVAL))
    ) ;_ end progn
  ) ;_ end if
  RETVAL
)

;; Funktion tauscht evtl. vorhandenen Attributwerte für Attributnamen aus
;; Argumente cons-Attliste z.B.: (("NR" . "10")("BAUART" . "Peitschenleuchte")) und Elementname
(defun ED-ATT2 (ATTLST ENAME / ATTOBJ ATTS MODIFIED OLD RETVAL VAL)
  (setq ENAME (->VLA-OBJECT ENAME))
  (if (setq VAL (ALL-BL-TXT ENAME))
    (progn
      (foreach NEW ATTLST
        (if (setq OLD (assoc (car NEW) VAL))
          (if (not (equal NEW OLD))
            (setq VAL      (subst NEW OLD VAL)
                  MODIFIED (cons NEW MODIFIED)
            ) ;_ end of setq
          ) ;_ end of if
        ) ;_ end of if
      ) ;_ end of foreach
      (if MODIFIED
        (progn
          (setq ATTS (vlax-safearray->list
                      (vlax-variant-value
                        (vlax-invoke-method ENAME 'GETATTRIBUTES)
                      ) ;_ end of vlax-variant-value
                    ) ;_ end of vlax-safearray->list
          ) ;_ end of setq
          (while ATTS
            (if (setq VAL (assoc (VLAX*GET-PROPERTY
                                  (setq ATTOBJ (car ATTS))
                                  'TAGSTRING
                                ) ;_ end of VLAX*GET-PROPERTY
                                MODIFIED
                          ) ;_ end of assoc
                ) ;_ end of setq
              (VLAX*PUT-PROPERTY ATTOBJ 'TEXTSTRING (cdr VAL))

            ) ;_ end of if
            (setq ATTS (cdr ATTS))
          ) ;_ end of while
          (setq RETVAL ENAME)
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
  RETVAL
) ;_ end of defun

(defun HASATTRIBUTES? (ENAME /)
  (if (setq ENAME (->VLA-OBJECT ENAME))
    (if (ISINSERT? ENAME)
      (= (vlax-get-property ENAME 'HASATTRIBUTES) :vlax-true)
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun


(defun ISINSERT? (ENAME /)
  (if (setq ENAME (->VLA-OBJECT ENAME))
    (= (vlax-get-property ENAME 'OBJECTNAME)
      "AcDbBlockReference"
    ) ;_ end of =
  ) ;_ end of if
) ;_ end of defun


;;; Mapcar-Magie!
;;; Eigenschaftswerte aus Objekten lesen
;;; Beispiel:
;;; Layerfarbe des aktuellen Layers abfragen:
;;; (vlax*get-property nil '(Color ActiveLayer ActiveDocument))
;;;
;;; Abfragen, ob eine Polylinie geschlossen ist:
;;; (VLAX*GET-PROPERTY (vlax-ename->vla-object (car (entsel))) 'CLOSED)
(defun VLAX*GET-PROPERTY (OBJ PROPS /)
  (if (->VLA-OBJECT OBJ) ;_ Wenn vla-Objekt draus gemacht werden kann...
    (setq OBJ (->VLA-OBJECT OBJ)) ;_ mache auf jeden Fall eines draus
  ) ;_ end of if
  (if (null OBJ)
    (setq OBJ (vlax-get-acad-object))
  ) ;_ end of if
  (if (and (listp PROPS) (cdr PROPS))
    (vlax-get-property
      (VLAX*GET-PROPERTY OBJ (cdr PROPS))
      (car PROPS)
    ) ;_ end of vlax-get-property
    (vlax-get-property
      OBJ
      (if (listp PROPS)
        (car PROPS)
        PROPS
      ) ;_ end of if
    ) ;_ end of vlax-get-property
  ) ;_ end of if
) ;_ end of defun

;;; Mapcar-Magie!
;;; Eigenschaftswerte für Objekte setzen
;;; Beispiel:
;;; Layerfarbe des aktuellen Layers auf 'Rot' setzen:
;;; (vlax*put-property nil '(Color ActiveLayer ActiveDocument) 1)
;;;
;;; Polylinie schliessen:
;;; (VLAX*PUT-PROPERTY (vlax-ename->vla-object (car (entsel))) 'CLOSED :vlax-true)
(defun VLAX*PUT-PROPERTY (OBJ PROPS VALUE /)
  (if (->VLA-OBJECT OBJ) ;_ Wenn vla-Objekt draus gemacht werden kann...
    (setq OBJ (->VLA-OBJECT OBJ)) ;_ mache auf jeden Fall eines draus
  ) ;_ end of if
  (if (null OBJ)
    (setq OBJ (vlax-get-acad-object))
  ) ;_ end of if
  (if (and (listp PROPS) (cdr PROPS))
    (vlax-put-property
      (VLAX*GET-PROPERTY OBJ (cdr PROPS))
      (car PROPS)
      VALUE
    ) ;_ end of vlax-put-property
    (vlax-put-property
      OBJ
      (if (listp PROPS)
        (car PROPS)
        PROPS
      ) ;_ end of if
      VALUE
    ) ;_ end of vlax-put-property
  ) ;_ end of if
) ;_ end of defun

;; Funktion zum Auslesen mehrere Eigenschaften
;; Argumente:
;; ename = ename oder vla-object
;; PROPERTYLIST = Liste mit Eigenscahftsnamen
;;   z.B. '(INSERTIONPOINT LAYER LINETYPE LINETYPESCALE LINEWEIGHT)
(defun VLAX*GET-PROPERTIES (ENAME PROPERTYLIST / PROP RETVAL)
  (foreach PROPERTY PROPERTYLIST
    (if (not (vl-catch-all-error-p
              (setq PROP (vl-catch-all-apply
                            'VLAX*GET-PROPERTY
                            (list ENAME (list PROPERTY))
                          ) ;_ end of vl-catch-all-apply
              ) ;_ end of setq
            ) ;_ end of vl-catch-all-error-p
        ) ;_ end of not
      (setq RETVAL (cons (cons PROPERTY PROP) RETVAL))
    ) ;_ end of if
  ) ;_ end of foreach
  RETVAL
) ;_ end of defun

;; Funktion zum Setzen mehrerer Eigenschaften
;; Argumente:
;; ename = ename oder vla-object
;; PROPERTYLIST = Liste mit Eigenscahftsnamen, z.B.:
;;   '((INSERTIONPOINT . #<variant 8197 ...> )
;;   (LAYER . "$BILD$25000-SW")
;;   (LINETYPE . "ByLayer")
;;   (LINETYPESCALE . 1.0)
;;   (LINEWEIGHT . -1))
(defun VLAX*PUT-PROPERTIES (ENAME PROPERTYLIST / PROP RETVAL)
  (foreach PROPERTY PROPERTYLIST
    (if (not (vl-catch-all-error-p
              (vl-catch-all-apply
                'VLAX*PUT-PROPERTY
                (list ENAME (car PROPERTY) (cdr PROPERTY))
              ) ;_ end of vl-catch-all-apply
            ) ;_ end of vl-catch-all-error-p
        ) ;_ end of not
      (setq RETVAL (cons PROPERTY RETVAL))
    ) ;_ end of if
  ) ;_ end of foreach
  RETVAL
) ;_ end of defun


(defun DT:VLAX-DELETE (ENAME /)
  (if (setq ENAME (->VLA-OBJECT ENAME))
    (if (vlax-method-applicable-p ENAME 'DELETE)
      (progn
        (vlax-invoke-method ENAME 'DELETE)
        (if (not (vlax-object-released-p ENAME))
          (vlax-release-object ENAME)
        ) ;_ end of if
        'T
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun

;; Funktion wendet findfile auf die übergebene Liste an
(defun FIND-FILES (LST / RETVAL)
  (if (member NIL (setq RETVAL (mapcar 'findfile LST)))
    (setq RETVAL NIL)
  ) ;_ end of if
  RETVAL
) ;_ end of defun

(defun DT:SELSET->ENAMELIST (SELSET / INDEX RETVAL)
  (if (eq (type SELSET) 'PICKSET)
    (progn
      (setq INDEX 0)
      (repeat (sslength SELSET)
        (setq RETVAL (cons (ssname SELSET INDEX) RETVAL)
              INDEX  (1+ INDEX)
        ) ;_ end of setq
      ) ;_ end of repeat
    ) ;_ end of progn
  ) ;_ end of if
  retval
) ;_ end of defun

(defun DT:SELSET->VLA-OBJECTLIST (SELSET / RETVAL)
  (if (eq (type SELSET) 'PICKSET)
    (if (setq RETVAL (DT:SELSET->ENAMELIST SELSET))
      (setq RETVAL
            (mapcar (function (lambda (X) (->VLA-OBJECT X))) RETVAL)
      ) ;_ end of setq
    ) ;_ end of if
  ) ;_ end of if
  RETVAL
) ;_ end of defun

;;; Funktion gibt Ename zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->ENAME (ENAME /)
  (cond
    ((= (type ENAME) 'VLA-OBJECT) (vlax-vla-object->ename ENAME))
    ((= (type ENAME) 'ENAME) ENAME)
    (t NIL)
  ) ;_ end of cond
) ;_ end of defun

;;; Funktion gibt vla-Objekt zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->VLA-OBJECT (ENAME /)
  (cond
    ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME))
    ((= (type ENAME) 'VLA-OBJECT) ENAME)
    (t NIL)
  ) ;_ end of cond
) ;_ end of defun

;; Funktion zum sicheren Ausführen von Code
;; Beispiel:
;; Normaler Aufruf:
;; (setq value (MS_multiList "Titel" "Aufforderung" '("C" "F") '("A" "B" "C" "D" "E" "F" "G")))
;; Safe Aufruf:
;; (setq retval (MS:SAFE-EVAL '(MS_multiList "Titel" "Aufforderung" ("C" "F") ("A" "B" "C" "D" "E" "F" "G"))))
;; oder
;; (setq retval (MS:SAFE-EVAL (list 'MS_multiList "Titel" "Aufforderung" '("C" "F") '("A" "B" "C" "D" "E" "F" "G"))))
(defun MS:SAFE-EVAL (EVALFUNCTION / ARGLST FUNCNAME RETVAL)
  (if EVALFUNCTION
    (if (setq FUNCNAME (car EVALFUNCTION))
        ;|(and (setq FUNCNAME (car EVALFUNCTION))
            (setq ARGLST (cdr EVALFUNCTION))
        ) ;_ end of and
        |;
      (progn
        (setq ARGLST (cdr EVALFUNCTION))

        (if (vl-catch-all-error-p
              (setq RETVAL (vl-catch-all-apply FUNCNAME ARGLST))
            ) ;_ end of vl-catch-all-error-p
          (setq RETVAL NIL)
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of if
  RETVAL
) ;_ end of defun

(defun MS:SAVEVARS (LISTOFPAIRS SYMBOLNAME / VARLIST)
  (foreach PAIR LISTOFPAIRS
    (setq varlist
        (cons
          (cons (car PAIR) (getvar (car PAIR)))
          varlist
        ) ;_ end of cons
    ) ;_ end of setq
    (setvar (car PAIR) (cdr PAIR))
  ) ;_ end of foreach
  (PUSH! varlist SYMBOLNAME)
) ;_ end of defun


(defun MS:RESTOREVARS (SYMBOLNAME)
  (if (setq VARLIST (POP! SYMBOLNAME))
    (foreach PAIR VARLIST
      (setvar (car PAIR) (cdr PAIR))
    ) ;_ end of foreach
  ) ;_ end of if
  VARLIST
) ;_ end of defun

;;; Legt ein Element auf einem Stapel ab und gibt es zurück
;;; Notwendig z.B. für das Wiederherstellen von Uservariablen u.ä.
;;; Argumente:
;;; ELM = Name der Variablen
;;; STACKSYM = Name des Stacks
(defun PUSH! (ELM STACKSYM /)
  (set STACKSYM (cons ELM (eval STACKSYM)))
  ELM
) ;_ end of defun


;;; Nimmt ein Element von einem Stapel herunter und gibt es zurück
;;; Notwendig z.B. für das Wiederherstellen von Uservariablen u.ä.
;;; Argumente:
;;; STACKSYM = Name des Stacks
(defun POP! (STACKSYM / ELM)
  (setq ELM (car (eval STACKSYM)))
  (set STACKSYM (cdr (eval STACKSYM)))
  ELM
) ;_ end of defun

(defun MS:SSGET (QUESTION FILTERLIST / SGET)
  (if (not (setq SGET (IMPLIZIT?+FILTER FILTERLIST)))
    (progn
      (setq QUESTION (strcat "\n" QUESTION)) ;_ end of setq
      (princ QUESTION)
      (setq SGET (MS:SAFE-EVAL (list 'ssget FILTERLIST)))
    ) ;_ end of progn
    (sssetfirst nil nil)
  ) ;_ end of if
  SGET
)

(defun IMPLIZIT?+FILTER (FILTERLIST)
  (ssget "_I" FILTERLIST)
) ;_ end of defun



..

------------------
Ciao,
Marc

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


Ex-Mitglied

erstellt am: 03. Jun. 2004 11:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von Kelme:
Grüßt euch!

Kann man einen Block suchen und durch einen anderen ersetzen?

Z.B. alle Blöcke A durch Block B ersetzen.

Gruß


Das "Suchen" ist einfach:
Befehl: (setq sset (SSGET "X" '((0 . "INSERT")(2 . "ALTERBLOCKNAME"))))

Damit hast Du den Auswahlsatz der Blockreferenzen in der Variablen SSET gespeichert.

Das Ändern dieser Referenzen auf einen neuen Blocknamen erledigst Du am einfachsten mit meinem Programm SSMOD, das Du aus http://www.archdim.de/SSMOD.LSP downloaden kannst (es liegt aber auch irgendwo hier im Forum - einfach die Suchfunktion einsetzen). Mit der Funkion SSMOD kannst Du nun die Referenzen einfach verbiegen:

Befehl: (ssmod sset 2 "NEUERBLOCKNAME")

Und das war's auch schon.

Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

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: 03. Jun. 2004 13: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 Kelme 10 Unities + Antwort hilfreich

Hi Tom,
schickes Tool.
Gibt es das auch unter berücksichtigung von Attributen?
Hast Du da was ähnlich kleines? So in der Art "ssmod-advanced".

------------------
Ciao,
Marc

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


Ex-Mitglied

erstellt am: 04. Jun. 2004 10:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von marc.scherer:
Hi Tom,
schickes Tool.
Gibt es das auch unter berücksichtigung von Attributen?
Hast Du da was ähnlich kleines? So in der Art "ssmod-advanced".

SSMOD nimmt einen Auswahlsatz und verändert für die Elemente darin die Werte gewünschter DXF-Gruppencodes. Es baut auf SSMODENT auf, das ein einzelnes Entity entsprechend ändert. Du kannst selbstverständlich SSMODENT auch völlig problemlos und ohne jede Änderung auf Attribute anwenden.

Gruß
Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

StephanJP
Mitglied
CAD-Admin


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

Beiträge: 829
Registriert: 09.11.2000

erstellt am: 04. Jun. 2004 11:46    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 Kelme 10 Unities + Antwort hilfreich

Hallo Tom,

Du könntest Deinen Code noch etwas verkürzen:

(defun ssmodent(ename dxf val / old)
  (entmod (list (assoc -1 (entget ename))(cons dxf val)))
)

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

gruß
Stephan

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


Ex-Mitglied

erstellt am: 04. Jun. 2004 12:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von StephanJP:
Hallo Tom,

Du könntest Deinen Code noch etwas verkürzen:

(defun ssmodent(ename dxf val / old)
  (entmod (list (assoc -1 (entget ename))(cons dxf val)))
)


Ohne das jetzt mit neuesten AutoCAD Versionen ausprobiert zu haben: nicht jedes Element lässt sich bzw liess sich in früheren AutoCAD Versionen so updaten - zumindest manche Elemente verlangten nach den vollen Enity-Listen. Aber auch in dieser Variante gibt's bei all den neueren Objekten Probleme, bei denen ein und derselbe Gruppencode mehrfach vorkommen kann, also z.B. bei LWPOLYLINE oder MTEXT.

Ich selber verwende SSMODENT mit einer selbstgeschriebenen Variante von SUBST, bei der das alte Element nicht engegeben werden muss:

;;; ersetzt in einer ASSOC-Liste den
;;; (car newpair) Ausdruck durch den newpair Ausdruck
(defun at-subst (newpair inlist / temp)
  (if (setq temp (assoc (car newpair) inlist))
    (subst newpair temp inlist) ; existiert schon, ersetzen
    (reverse (cons newpair (reverse inlist))) ; hinten dran
  )
)

Mein SSMODENT sieht dann so aus:

(defun ssmodent (ename dxf val / old)
  (entmod (at-subst
      (cons dxf val)
      (entget ename)
    )
    )
)

Gruß
Tom Berger


------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

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: 04. Jun. 2004 13:04    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 Kelme 10 Unities + Antwort hilfreich

Hi Tom,
nein ich meinte eher etwas, dass nicht die Inserts zu den Blockdefs unsynchron macht.
Mit Deiner Methode hängen nach dem Austauschen von Insert mit Attributen durch ein Insert ohne Attribute auf einmal Attribute am ausgetauschten Insert. Das kann doch nicht im Sinne des Erfinders sein?

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 07. Jun. 2004 editiert.]

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


Ex-Mitglied

erstellt am: 05. Jun. 2004 12:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von marc.scherer:
Hi Tom,
neimn ich meinet eher etwas, dass nicht die Inserts zu den Blockdefs unsynchron macht.
Mit Deiner Methode hängen nach dem Austauschen von Insert mit Attributen durch ein Insert ohne Attribute auf einmal Attribute am ausgetauschten Insert. Das kann doch nicht im Sinne des Erfinders sein?

Doch, das ist im Sinne des Erfinders, der hier Autodesk heisst. Es gibt keine wirkliche Bindung zwischen einer Blockreferenz und den Attributen. Man kann jederzeit Attribute an eine Blockreferenz hängen, deren Blockdefinition überhaupt keine Attributdefinitionen hat.

Wenn Du willst, dass die Attribute an die eventuell vorhandenen ATTDEFs der neuen Blockreferenz angepasst werden, dann musst Du den Anwender ja auch nach den neuen Attributwerten fragen. Wenn die Blockdefinition keine ATTDEFs hat, kannst Du die ATTRIBs natürlich einfach löschen (Block-Flag nicht vergessen).

Gruß
Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

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: 07. Jun. 2004 09: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 Kelme 10 Unities + Antwort hilfreich

Hi Tom,
Zitat:
Original erstellt von tom.berger:
Doch, das ist im Sinne des Erfinders, der hier Autodesk heisst. Es gibt keine wirkliche Bindung zwischen einer Blockreferenz und den Attributen. Man kann jederzeit Attribute an eine Blockreferenz hängen, deren Blockdefinition überhaupt keine Attributdefinitionen hat.


Ja, das ist mir schon klar, dem durchschnittlichen Acad-User aber nicht. Und nur weil es GEHT, heißt es nicht das es sinnvoll oder gar von ADesk gewollt war. Denn eine solche Struktur läßt sich IMHOIn my humble opinion = Meiner bescheidenen Meinung nach nur durch programmiertechnische Kniffe erzeugen, nicht mit Acad-Befehlen.
Wenn ein Programm dann so etwas "fieses" tut, halte ich das für einen Bug im Programm, denn die Regeln des Standard-Programms werden einfach gebrochen.
Beim Erfinder dachte ich dann eher an Dich und Deine Routine. Du jubelst hier den Normal-Usern eine Routine unter, die bei solchen echt einiges an Verwirrung stiften kann (z.B. Blöcke die sichtbare Attribute haben, Acad meldet aber auf einmal "Block hat keine Attribute")

Zitat:
Original erstellt von tom.berger:

Wenn Du willst, dass die Attribute an die eventuell vorhandenen ATTDEFs der neuen Blockreferenz angepasst werden, dann musst Du den Anwender ja auch nach den neuen Attributwerten fragen. Wenn die Blockdefinition keine ATTDEFs hat, kannst Du die ATTRIBs natürlich einfach löschen (Block-Flag nicht vergessen).

Auch das ist mir klar, wenn Du Dir mal die Mühe machen würdest den hier geposteten Code zu testen, hättest Du festgestellt das meine Routine vorhandene Attribute berücksichtigt. Somit hättest Du auch gewußt das Deine Erklärungen mir gegenüber flüssiger als flüssig waren.

Auf in Zukunft fruchtbareren Gedankenaustausch, lieber Tom.
Verbleibe ich,
MFG
Marc

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


Ex-Mitglied

erstellt am: 07. Jun. 2004 13:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von marc.scherer:
Ja, das ist mir schon klar, dem durchschnittlichen Acad-User aber nicht. Und nur weil es GEHT, heißt es nicht das es sinnvoll oder gar von ADesk gewollt war. Denn eine solche Struktur läßt sich IMHOIn my humble opinion = Meiner bescheidenen Meinung nach nur durch programmiertechnische Kniffe erzeugen, nicht mit Acad-Befehlen.

Nein, das lässt sich sogar sehr einfach mit AutoCAD Befehlen erzeugen: erstelle einen Block mit Attributen und füge ihn ein paar Mal in die Zeichnung ein. Dann erzeugst Du den Block neu, diesmal ohne Attribute. Die Attribute an den vorhandenen Blockreferenzen bleiben davon unberührt. Und das funktioniert ganz genau auch anders herum, oder wenn Du den Block mit anderen Attdefs neu definierst. Ohne damit Deinen Beitrag schmälern zu wollen: mein kleines Progrämmchen bildet das Verhalten von AutoCAD deshalb sogar genauer nach als Deines :-)

Welches Werkzeug im konkreten Fall sinnvoller eingesetzt wird, hängt von den Umständen ab, und muss deshalb dem Anwender überlassen werden.

Natürlich kann man auch davon unabhängig immer darüber philosophieren, ob man dem Endanwender hochwirksame und deshalb auch potentiell gefährliche Werkzeuge in die Hand geben sollte. Ich denke: ja.

Gruß
Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

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: 07. Jun. 2004 13:38    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 Kelme 10 Unities + Antwort hilfreich

Hi Tom,
oh. Mal gut das ich IMHOIn my humble opinion = Meiner bescheidenen Meinung nach geschrieben habe :grins. Na dann sind wir bei der Diskussion "Bug oder Feature" angelangt :-).
Na ja, in einer Hinsicht unterscheidet Dein Tool sich dann doch noch von Standard AutoCAD,
Acad produziert zumindest auf die von Dir beschriebenen Weise keinen Block der beim Editieren dann "Der ausgewählte Block verfügt über keine bearbeitbaren Attribute." meldet, ssmod aber doch. Aber welches Tool ist schon fehlerfrei. Nun gib' Ruhe...

------------------
Ciao,
Marc

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

DomiX
Mitglied
Technischer Zeichner - Elektrotechnik


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

Beiträge: 37
Registriert: 06.10.2008

Windows XPp SP3; AutoCAD 2009

erstellt am: 06. Apr. 2009 11:18    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 Kelme 10 Unities + Antwort hilfreich

Hallo, Leute!
So, ich habe mich mit der ssget.lisp schon ein wenig befasst, mein Problem liegt nun darin, dass ich sie niergends finde!?
Wo kann ich die downloaden?

Achja, und Tom, mit deinem Link komme ich da nicht klar, der bringt mir überhauptnichts...!?

------------------
Viele denken daran, die Menscheit
zu ändern, aber kein Mensch denkt
daran sich zu ändern...

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

System: F1
und Google

erstellt am: 06. Apr. 2009 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 Kelme 10 Unities + Antwort hilfreich

keine Ahnung was du mit "ssget.lisp" meinst, ssget ist eine Lispfunktion
falls es das garnicht gibt wäre es auch klar warum du es nicht findest
solange du nicht SSGET in der Acad-Entwicklersuche suchst oder ein (ssget)
eintippst.
Schade das dir der Link von dem ExMitgleid Tom von vor einem halben Jahrzehnt
nicht hilft.

Nochmal kurz nachgehakt: Was ist dein Problem ?

------------------
die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk)

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

DomiX
Mitglied
Technischer Zeichner - Elektrotechnik


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

Beiträge: 37
Registriert: 06.10.2008

Windows XPp SP3; AutoCAD 2009

erstellt am: 07. Apr. 2009 13: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 Kelme 10 Unities + Antwort hilfreich

Gut, das mit der Lisp selbst hat sich erledigt...
In einem anderem Forum habe ich gelesen, dass man damit ganz leicht Sachen anwählen kann, ganz egal, ob im Block oder normal, und auch so filtern kann, stimmt das?
Wenn ja: Wie?

------------------
Viele denken daran, die Menscheit
zu ändern, aber kein Mensch denkt
daran sich zu ändern...

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

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 07. Apr. 2009 13:47    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 Kelme 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von DomiX:
Gut, das mit der Lisp selbst hat sich erledigt...
In einem anderem Forum habe ich gelesen, dass man damit ganz leicht Sachen anwählen kann, ganz egal, ob im Block oder normal, und auch so filtern kann, stimmt das?
Wenn ja: Wie?


dann würde ich da im anderen Forum in dem speziellen Thread nachfragen

das in autolisp eingebaute ssget nimmt jedenfalls nur Top-Level-Objekte.

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

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