Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  mehrere Elemente in List tauschen mit subst

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
Autor Thema:   mehrere Elemente in List tauschen mit subst (165 mal gelesen)
cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 197
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2012; MEP/ACA2015; MEP/ACA2018; Architectural Office 2009

erstellt am: 30. Sep. 2019 20: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

Hallo Leute,
ich möchte in einer Entityliste von Layout mehere Elemente autauschen.
Hinweis zu Werten:
(setq Papierformat "ISO_full_bleed_A2_(594.00_x_420.00_MM)")
(setq Ausrichtung (cons 73 0))
!Bereich -> ((0.0 0.0 0.0) (1211.0 594.0 0.0))
(setq Planlänge (car(car(cdr bereich)))) -> 1211.0
(setq Planhöhe (car(cdr(car(cdr bereich))))) -> 594.0


LayoutEntlist:
(-1 . <Objektname: 319e1520> )
(0 . "LAYOUT")
(5 . "BEB2")
(102 . "{ACAD_REACTORS")
(330 . <Objektname: 3a581560> )
(102 . "}")
(330 . <Objektname: 3a581560> )
(100 . "AcDbPlotSettings")
(1 . "")
(2 . "Kein")
(4 . "Letter_(8.50_x_11.00_Inches)")
(40 . 6.35)
(41 . 6.35)
(42 . 6.35001)
(43 . 6.35001)
(44 . 215.9)
(45 . 279.4)
(46 . -2068.41)
(47 . -752.237)
(48 . 0.0)
(49 . 0.0)
(140 . 1211.0)
(141 . 594.0)
(142 . 1.0)
(143 . 1.0)
(70 . 512)
(72 . 1)
(73 . 0)
(74 . 0)
(7 . "")
(75 . 16)
(147 . 1.0)
(76 . 0)
(77 . 2)
(78 . 300)
(148 . 1042.05)
(149 . 244.961)
(100 . "AcDbLayout")
(1 . "A1Überlänge")
(70 . 1)
(71 . 2)
(10 1020.01 500.926 0.0)
(11 1235.91 780.326 0.0)
(12 0.0 0.0 0.0)
(14 282.434 499.925 -0.00152582)
(15 1711.05 1094.03 3.49246e-08)
(146 . 0.0)
(13 0.0 0.0 0.0)
(16 1.0 0.0 0.0)

(setq newLayoutEntlist (subst (cons 10 (car bereich))(assoc 10 LayoutEntlist);Plotfenster Ecke unten links
                              (cons 11 (car (cdr bereich)))(assoc 11 LayoutEntlist);Plotfenster Ecke oben rechts
                              (cons 4 Papierformat) (assoc 4 LayoutEntlist);Papierformat
                              Ausrichtung (assoc 73 LayoutEntlist);Zeichnungsausrichtung (Querformat 73 . 1)(Hochformat 73 . 0)
                              (cons 46 0.0) (assoc 46 LayoutEntlist);Abstand von Fenster zu Papierformat unten
                              (cons 47 0.0) (assoc 47 LayoutEntlist);Abstand von Fenster zu Papierformat oben
                              (cons 48 0.0) (assoc 48 LayoutEntlist);Abstand von Fenster zu Papierformat rechts
                              (cons 49 0.0) (assoc 49 LayoutEntlist);Abstand von Fenster zu Papierformat links
                              (cons 148 0.0) (assoc 148 LayoutEntlist);X-Versatz Fenster zu Papierformat
                              (cons 149 0.0) (assoc 149 LayoutEntlist);Y-Versatz Fenster zu Papierformat
                              (cons 44 Planlänge)(assoc 44 LayoutEntlist);Plotfensterlänge von Papierformat
                              (cons 45 Planhöhe)(assoc 45 LayoutEntlist);Plotfensterhöhe von Papierformat
LayoutEntlist)
)

gibt mir -> Zu viele Argumente -< zurück
Was ist mit dem subst nicht in Ordnung? Ich habe es auch ohne die Kommentare (die Kommentare hinter den  versucht. Gleiches Ergebnis.

------------------
Danke Stefan

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: 19368
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 30. Sep. 2019 21:24    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 cadking 10 Unities + Antwort hilfreich

Öffne die AcadHilfe und schau dir die Doku zur Lispfunktion SUBST an.

Unabhängig davon ob es in dem Fall überhaupt funktionieren wird..Bitte teste die Funktion an einer einfachen LINIE!

Du wirst in der Doku sehen: Subst erwartet 3 Argumente,  nicht mehr, nicht weniger.
Du wirst also jedes Ergebnis zwischenspeichern müssen (setq) und mit dieser Entityliste weiterarbeiten müsse  oder das Ganze verschachteln müssen.
Aber mach es zunächst mit dem Zwischenspeichern, das hilft dem Verständnis.

Meld dich mit deinem LINIE Test (und nur 2 oder 3 Änderungen) wenn es noch immer nicht funktionieren will.

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1651
Registriert: 11.10.2004

Window 8.1
ACAD 2012-2019
CIVIL 2012 - 2019
BricsCAD V14-V18
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

erstellt am: 01. Okt. 2019 17:57    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 cadking 10 Unities + Antwort hilfreich

Hallo Stefan,
nur so ein Gedanke, das kann man auch mit einer MAPCAR-Schleife machen.
Die Liste "layoutEntList" mit MAPCAR durchlaufen lassen, und jeweils auf Vorhandensein des aktuellen Gruppencodes mit ASSOC in der Liste "NewList" prüfen. Wenn ja, dann wird der Eintrag aus der Liste "newList" verwendet, sonst der Eintrag aus der Liste "layoutEntList".

Einschränkung: auf diese Weise dürfen keine Gruppencodes getauscht werden, die doppelt auftreten (z.B. Gruppencode 10 bei LW-Polylinie), das gibt Murks.
Anmerkung: in der Liste "layoutEntList" habe ich bei den Gruppencodes -1 und 330 einen String eingefügt, ist ja nur zum testen des Prinzips.

Code:

(defun c:test ( / AUSRICHTUNG BEREICH LAYOUTENTLIST NEWLAYOUTENTLIST NEWLIST PAPIERFORMAT PLANHÖHE PLANLÄNGE X)

  (setq Papierformat "ISO_full_bleed_A2_(594.00_x_420.00_MM)")
  (setq Ausrichtung  0)
  (setq bereich '((0.0 0.0 0.0) (1211.0 594.0 0.0)))
  (setq Planlänge (car(cadr bereich)));;; -> 1211.0
  (setq Planhöhe (cadr(cadr bereich)));;; -> 594.0

  (setq NewList
        (list(cons 10 (car bereich));Plotfenster Ecke unten links
              (cons 11 (cadr bereich));Plotfenster Ecke oben rechts
              (cons 4 Papierformat) ;Papierformat
              (cons 73 Ausrichtung);Zeichnungsausrichtung (Querformat 73 . 1)(Hochformat 73 . 0)
              (cons 46 0.0);Abstand von Fenster zu Papierformat unten
              (cons 47 0.0);Abstand von Fenster zu Papierformat oben
              (cons 48 0.0);Abstand von Fenster zu Papierformat rechts
              (cons 49 0.0);Abstand von Fenster zu Papierformat links
              (cons 148 0.0);X-Versatz Fenster zu Papierformat
              (cons 149 0.0);Y-Versatz Fenster zu Papierformat
              (cons 44 Planlänge);Plotfensterlänge von Papierformat
              (cons 45 Planhöhe);Plotfensterhöhe von Papierformat
              )
        )

  ;;;Nur Testliste, Normalerweise mit (entget ename)
  (setq layoutEntList
        '((-1 . "<Objektname: 319e1520>");;;STRING, nur zum testen
          (0 . "LAYOUT")
          (5 . "BEB2")
          (102 . "{ACAD_REACTORS")
          (330 . "<Objektname: 3a581560>");;;STRING, nur zum testen
          (102 . "}")
          (330 . "<Objektname: 3a581560>");;;STRING, nur zum testen
          (100 . "AcDbPlotSettings")
          (1 . "")
          (2 . "Kein")
          (4 . "Letter_(8.50_x_11.00_Inches)")
          (40 . 6.35)
          (41 . 6.35)
          (42 . 6.35001)
          (43 . 6.35001)
          (44 . 215.9)
          (45 . 279.4)
          (46 . -2068.41)
          (47 . -752.237)
          (48 . 0.0)
          (49 . 0.0)
          (140 . 1211.0)
          (141 . 594.0)
          (142 . 1.0)
          (143 . 1.0)
          (70 . 512)
          (72 . 1)
          (73 . 0)
          (74 . 0)
          (7 . "")
          (75 . 16)
          (147 . 1.0)
          (76 . 0)
          (77 . 2)
          (78 . 300)
          (148 . 1042.05)
          (149 . 244.961)
          (100 . "AcDbLayout")
          (1 . "A1Überlänge")
          (70 . 1)
          (71 . 2)
          (10 1020.01 500.926 0.0)
          (11 1235.91 780.326 0.0)
          (12 0.0 0.0 0.0)
          (14 282.434 499.925 -0.00152582)
          (15 1711.05 1094.03 3.49246e-08)
          (146 . 0.0)
          (13 0.0 0.0 0.0)
          (16 1.0 0.0 0.0)
          ))
       


  (setq newLayoutEntlist
        (mapcar '(lambda(X)
                    (if (assoc (car X)NewList)
                      (assoc (car X)NewList)
                      X))layoutEntList))

 

 
newLayoutEntlist)


------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Foto-Manager Youtube

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)2019 CAD.de | Impressum | Datenschutz