Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Sortierung Masstabsliste

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:  Sortierung Masstabsliste (1515 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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 21. Mrz. 2019 12: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


Masstabsliste.jpg

 
Hallo Leute,
ich würde gerne über Lisp die Reihenfolge der Masstabsliste (s. Anhang) festlegen.
kann mir da jemand helfen?

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

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 21. Mrz. 2019 17:32    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

Die frage ist wo hängst du denn?

------------------
Gruß Wolfgang

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: 21. Mrz. 2019 17:36    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

Wir fangen mit Schritt eins an: Feststellen was/wo die Reihenfolge ausmacht.
Also im DXF und damit vermutlich auch in AutoLISP ist es die Reihenfolge in der die Massstäbe angelegt wurden (bzw dann nachträglich geändert wurden).

Habe noch nie nachgesehen ob es eine VLisp-Möglichkeit der Sortierung gibt,
aber ich wollte es auch noch nie per Programm und Lisp ändern ;D

Wo hängst du Stefan?

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 21. Mrz. 2019 18: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

Hallo cadffm,
ich habe gar keinen Ansatz. Ich habe ca. 200 Dateien, die ich per Lisp öffne und in denen diverse Änderungen vornehme ( auch per lisp). Unter anderem lösche ich alle nicht benutzten Maßstäbe und importiere die gewünschten Maßstäbe, indem ich einen Text mit den gewünschten Beschriftungsmaßstäben importiere (mit INSERT *Dateiname.dwg). Dann erhalte ich die Sortierreihenfolge wie im JPG. Aber wie ich die dann in die richtige Reihenfolge bringe, dazu fehlt mir jeglicher Ansatz.

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

Alles

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

Gut einen Tip habe ich ja bereits gegeben (wenn gleich ich dies nie in Lisp getestet habe),
aber wenn dir das als Starthilfe nichts taugt, dann mal was anderes - eher weg vom Programmieren
und mehr hin zum Praktiker-Ansatz.

Du importierst die Maßstäbe erst durch den Import eines Beschriftungsobjektes?
Also wenn vorher keine dieser Maßstäbe vorhanden ist und man dann meine Aussage
über die Erstellreihenfolge berücksichtigt, dann wäre es ja einen Versuch Wert
die Maßstäbe einzeln in der benötigten Reihenfolge zu importieren.

Auf der anderen Seite: Wenn einem die Definitionen der Maßstäbe bekannt ist,
warum dann importieren und nicht direkt erstellen?
Ich kenne nicht deine gesamte IST und SOLL Situation, aber:

CANNOSCALE für den Aktuellen (der aktuelle lässt sich nicht löschen, auchder orignale 1:1 nicht,
daher sollte 1:1 aktuell gesetzt werden und damit bleibt dieser als erstes oben stehen.

-MSTABLISTEBEARB zum resetten, löschen und anlegen von Beschriftungsmaßstäben.
Oder halt doch richtig in die Programmierung einsteigen, aber da wir nicht alle Fakten kennen
ist das schwierig zu helfen. Ich drücke dir mal die Daumen, also Helfer steige ich hier wohl aus (sorry)

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 22. Mrz. 2019 09:30    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

Hier mal was zum Spielen (dreht die reihenfolge) ohne Gewähr 
Code:
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe))
(setq Maß-Liste nil)
(foreach teil Maßstäbe
  (setq ENTScale (entget (cdr teil)))
  (setq Maß-Liste (cons (list (cdr (assoc 300 ENTScale))
      (cdr (assoc 140 ENTScale))
      (cdr (assoc 141 ENTScale))
)
Maß-Liste
  )
  )
)
(foreach teil Maßstäbe
  (setq ENTScale (entget (cdr teil)))
  (setq ENTScale (subst (cons 300 (caar Maß-Liste))
(assoc 300 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 140 (cadar Maß-Liste))
(assoc 140 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 141 (caddar Maß-Liste))
(assoc 141 ENTScale)
ENTScale
)
  )
  (entmod ENTScale)
  (setq Maß-Liste (cdr Maß-Liste))
)

------------------
Gruß Wolfgang

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 23. Mrz. 2019 13: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

Hallo Wolfgang,
mit deinem Ansatz bin ich weitergekommen.

Codeanfang:

;sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst)
;Xref-Maßstäbe werden mitsortiert
(defun ScalelistSort ( / aktCannoScale Maßstäbe Maß-Liste ENTScale)
(setq aktCannoScale (getvar "CannoScale"));holt aktuellen Maßstab
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe))
(setq Maß-Liste nil)
(foreach teil Maßstäbe
  (setq ENTScale (entget (cdr teil)))
  (setq Maß-Liste (cons (list (cdr (assoc 300 ENTScale))
      (cdr (assoc 140 ENTScale))
      (cdr (assoc 141 ENTScale))
)
Maß-Liste
  )
  )
)
(setq Maß-Liste
(vl-sort Maß-Liste '(lambda (e1 e2) (< (car (cdr (cdr e1))) (car (cdr (cdr e2))))));sortiern nach dem 3.ten Atom (Zeicheneinheiten) der Liste (kleinstes zuerst)
)
(foreach teil Maßstäbe
  (setq ENTScale (entget (cdr teil)))
  (setq ENTScale (subst (cons 300 (caar Maß-Liste))
(assoc 300 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 140 (cadar Maß-Liste))
(assoc 140 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 141 (caddar Maß-Liste))
(assoc 141 ENTScale)
ENTScale
)
  )
  (entmod ENTScale)
  (setq Maß-Liste (cdr Maß-Liste))
)
(command "CannoScale" aktCannoScale);setzt alten Maßstab aktuell
)
(ScalelistSort)

Codeende:

Jetzt habe ich ein neues Problem.
Ich möchte Xref-Maßstäbe bei der Sortierung unberücksichtigt lassen.

(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)

sortiert nur "nicht-Xref-Maßstäbe". Aber bei der Neuerstellung der Liste wird ja jedesmal das erste Listenelement gelöscht.
Irgendwann gibt die Variable "Maß-Liste" dann ein nil zurück. Dann steigt das Programm aus und meldet:

Aufrufen von (command) aus *Fehler* nicht möglich, ohne vorheriges Aufrufen von (*push-error-using-command*).
Konvertieren von (command)-Aufrufen in (command-s) wird empfohlen.

kann man dem foreach mitgeben, dass es nur solange ausgeführt wird, bis die Variable "Maß-Liste" nur noch 1 Element enthält? Also bevor durch das nächste
(setq Maß-Liste (cdr Maß-Liste) ein nil zurück gibt!

Codeanfang mit Xref:

;sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst)
;Xref-Maßstäbe werden nicht mitsortiert
(defun ScalelistSort ( / aktCannoScale Maßstäbe Maß-Liste ENTScale)
(setq aktCannoScale (getvar "CannoScale"));holt aktuellen Maßstab
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe))
(setq Maß-Liste nil)
;----------------------------------------------------------------------------------------
;begin - sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
(foreach teil Maßstäbe
(setq ENTScale (entget (cdr teil)))
(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)
  (progn
;
(print "300: ")(princ (cdr (assoc 300 ENTScale)))(terpri)
;
    (setq Maß-Liste (cons (list (cdr (assoc 300 ENTScale))
      (cdr (assoc 140 ENTScale))
      (cdr (assoc 141 ENTScale))
)
Maß-Liste
  )
  )
  );end progn
);end if
);end foreach
(setq Maß-Liste
(vl-sort Maß-Liste '(lambda (e1 e2) (< (car (cdr (cdr e1))) (car (cdr (cdr e2))))));sortiern nach dem 3.ten Atom (Zeicheneinheiten) der Liste (kleinstes zuerst)
)
;end - sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
;----------------------------------------------------------------------------------------
(print "Maß-Liste: ")(princ Maß-Liste)(terpri)
(setq lauf 0)
;----------------------------------------------------------------------------------------
;begin - Neuerstellung Liste aller sortierten Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
(foreach teil Maßstäbe
(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)
  (progn
  (setq ENTScale (entget (cdr teil)))
  (setq ENTScale (subst (cons 300 (caar Maß-Liste))
(assoc 300 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 140 (cadar Maß-Liste))
(assoc 140 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 141 (caddar Maß-Liste))
(assoc 141 ENTScale)
ENTScale
)
  )
  (entmod ENTScale)
  (setq Maß-Liste (cdr Maß-Liste))
  );end progn
);end if
  (setq lauf (+ 1 lauf))(print "Lauf: ")(princ Lauf)(princ " - 300: ")(princ (cdr (assoc 300 ENTScale)))(terpri)
(print "Maß-Liste neu: ")(princ Maß-Liste)(terpri)
);end foreach
;end - Neuerstellung Liste aller sortierten Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
;----------------------------------------------------------------------------------------
;(print "Maß-Liste neu: ")
(command "CannoScale" aktCannoScale);setzt alten Maßstab aktuell
)
(ScalelistSort)

Codeaende mit Xref:

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

[Diese Nachricht wurde von cadking am 23. Mrz. 2019 editiert.]

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 23. Mrz. 2019 13: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

Sorry, ich habe im vorherigen Beitrag 2x den selben Code gepostet.
also nochma die Frage:

kann man dem foreach mitgeben, dass es nur solange ausgeführt wird, bis die Variable "Maß-Liste" nur noch 1 Element enthält? Also bevor durch das nächste
(setq Maß-Liste (cdr Maß-Liste) ein nil zurück gibt!

Codeanfang mit Xref:

;sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst)
;Xref-Maßstäbe werden nicht mitsortiert
(defun ScalelistSort ( / aktCannoScale Maßstäbe Maß-Liste ENTScale)
(setq aktCannoScale (getvar "CannoScale"));holt aktuellen Maßstab
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe))
(setq Maß-Liste nil)
;----------------------------------------------------------------------------------------
;begin - sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
(foreach teil Maßstäbe
(setq ENTScale (entget (cdr teil)))
(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)
  (progn
;
(print "300: ")(princ (cdr (assoc 300 ENTScale)))(terpri)
;
    (setq Maß-Liste (cons (list (cdr (assoc 300 ENTScale))
      (cdr (assoc 140 ENTScale))
      (cdr (assoc 141 ENTScale))
)
Maß-Liste
  )
  )
  );end progn
);end if
);end foreach
(setq Maß-Liste
(vl-sort Maß-Liste '(lambda (e1 e2) (< (car (cdr (cdr e1))) (car (cdr (cdr e2))))));sortiern nach dem 3.ten Atom (Zeicheneinheiten) der Liste (kleinstes zuerst)
)
;end - sortiert Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
;----------------------------------------------------------------------------------------
(print "Maß-Liste: ")(princ Maß-Liste)(terpri)
(setq lauf 0)
;----------------------------------------------------------------------------------------
;begin - Neuerstellung Liste aller sortierten Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
(foreach teil Maßstäbe
(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)
  (progn
  (setq ENTScale (entget (cdr teil)))
  (setq ENTScale (subst (cons 300 (caar Maß-Liste))
(assoc 300 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 140 (cadar Maß-Liste))
(assoc 140 ENTScale)
ENTScale
)
  )
  (setq ENTScale (subst (cons 141 (caddar Maß-Liste))
(assoc 141 ENTScale)
ENTScale
)
  )
  (entmod ENTScale)
  (setq Maß-Liste (cdr Maß-Liste))
  );end progn
);end if
  (setq lauf (+ 1 lauf))(print "Lauf: ")(princ Lauf)(princ " - 300: ")(princ (cdr (assoc 300 ENTScale)))(terpri)
(print "Maß-Liste neu: ")(princ Maß-Liste)(terpri)
);end foreach
;end - Neuerstellung Liste aller sortierten Maßstabsliste nach Zeicheneinheiten (kleinstes zuerst) ohne Xref-Maßstäbe
;----------------------------------------------------------------------------------------
;(print "Maß-Liste neu: ")
(command "CannoScale" aktCannoScale);setzt alten Maßstab aktuell
)
(ScalelistSort)

Codeaende mit Xref:

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

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

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

Hallo das ist der Punkt den dir cadffm schon beschreiben hat.
Zitat:
aber da wir nicht alle Fakten kennen
ist das schwierig zu helfen. Ich drücke dir mal die Daumen, also Helfer steige ich hier wohl aus (sorry)

Wie ist denn
Zitat:
unberücksichtigt lassen
von dir gemeint
XRef-Scale löschen = dann lösch ihn.
XRef-Scale übergehen (so lassen wie er ist) = dann schreib ihn einfach wieder zurrück.
XRef-Scale ans ende verschieben = dann liste neu Sortieren.

aber ich denke mal du willst sie löschen.
Daher wäre der Ablauf nur logisch wenn Maßstäbe mehr Elemente hat als meine neue Maß-Liste dann die übriggebliebenen Maßstäbe löschen.
(foreach teil Maßstäbe
(if Maß-Liste
dann wie gehabt
(progn
  (setq ENTScale (entget (cdr teil)))
  (setq ENTScale (subst (cons 300 (caar Maß-Liste))
(assoc 300 ENTScale).....................

ansonsten
(entdel teil )

(das ist nur jetzt ungetest von mit hier so hingeschmiert

ich gebe noch zu bedenken ein entfernen und hinzufügen so auf keinen fall ratsam ist weil was ist wenn Maß-Liste einmal länger ist als Maßstäbe . Dann lieber wenn du deine liste hast die alten alle löschen und dann deine neu anlegen. 


------------------
Gruß Wolfgang

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 24. Mrz. 2019 12: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


ScalelistSort.lsp


ScalelistSortOhneXrefs.lsp

 
Hallo Wolfgang,hallo cadffm
vielen Dank für Eure Hilfe. Ich habe habe es geschafft.

Mein Ziel:
in der Maßstabsliste sollen zuerst die Xref-Maßstäbe (sortiert nach Zeichnungseinheiten - kleinste ganz oben)
dann
die internen Maßstäbe (sortiert nach Zeichnungseinheiten - kleinste ganz oben)
Mein Ablauf für die Sortierung:
erst sortieren der Liste aller internen Maßstäbe mit:
(foreach teil Maßstäbe
(if (=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)

in neuer Liste, dann
sortieren der Liste aller Xref-Maßstäbe mit:

(foreach teil Maßstäbe
(if (/=  (vl-string-search "_XREF" (cdr (assoc 300 ENTScale))) nil)

in neuer Liste, dann
beide Listen zusammensetzen mit:

(setq Maß-Liste(append Maß-ListeMR Maß-ListeOR))

und neue Maßstabsliste übergeben.

Im Anhang sind beide Varianten:
ScalelistSort.lsp -> sortiert auch Xref-Maßstäbe
ScalelistSortOhneXrefs.lsp -> sortiert erst Xref-Maßstäbe dann interne Maßstäbe

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

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 24. Mrz. 2019 16: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

Neues Problem!

nach dem Sortieren der Maßstabslisten habe Objekte mit Beschriftungsmaßstäben andere Beschriftungsmaßstäbe.
z.B.:
Text mit Beschriftungsmaßstab 1:100 vorher
nach Sortierung
Text mit Beschriftungsmaßstab 1:200 nachher

Hat jemand eine wie die Objekte den alte Beschriftungsmaßstab behalten?

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

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 25. Mrz. 2019 09: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 cadking 10 Unities + Antwort hilfreich

Ja so ist es weil das Beschriftungsobjekt einen verweis auf den Maßstab hat und im grunde in dem prog jedem Maßstab ein neuer Wert zugewiesen wird. Aber der Verweis bleibt der gleiche. Und wie schon erwähnt
Zitat:
ich gebe noch zu bedenken ein entfernen und hinzufügen so auf keinen fall ratsam  

Und da sagen die Jungs hier immer die hätten keine Glaskugel     
Du hast natürlich jetzt auf meine Spielerei aufgabaut die ich dir gezeigt habe.
Da du keinen Ansatz hattest sollte es dir zeigen wie du an die Maßstab Daten kommst nicht aber die manipulation vorgeben.
Und hier muss ich mich wiederholen
Zitat:
aber da wir nicht alle Fakten kennen ist das schwierig zu helfen. Ich drücke dir mal die Daumen, also Helfer steige ich hier wohl aus (sorry)

daher solltest du dann die (foreach teil Maßstäbe schleife rausschmeißen und dich darauf konzentrieren diese Liste
Code:
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
in die richtige rheihenfolge zu bringen.


------------------
Gruß Wolfgang

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 25. Mrz. 2019 10: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 cadking 10 Unities + Antwort hilfreich

Hier teste mal damit
Code:
(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq
  Maßstäbe (vl-remove-if-not '(lambda (x) (= (car X) 350)) Maßstäbe)
)
(setq Maß-Liste nil)
(foreach teil Maßstäbe
  (setq ENTScale (entget (cdr teil)))
  (setq Maß-Liste (cons (list (cdr (assoc 300 ENTScale))
      (cdr (assoc 140 ENTScale))
      (cdr (assoc 141 ENTScale))
      (cdr teil)
)
Maß-Liste
  )
  )
)
(setq Maß-Liste
      (vl-sort Maß-Liste
'(lambda (e1 e2)
  (< (car (cdr (cdr e1))) (car (cdr (cdr e2))))
)
      )
)

(setq Maßstäbe (dictsearch (namedobjdict) "ACAD_SCALELIST"))
(setq Zähler1 -1)
(entmod
  (mapcar
    '(lambda (x)
      (if (= (car X) 350)
(progn (setq Zähler1 (1+ Zähler1))
(cons 350 (cadddr (nth Zähler1 Maß-Liste)))
)
x
      )
    )
    Maßstäbe
  )
)


------------------
Gruß Wolfgang

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

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: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 25. Mrz. 2019 15: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


ScalelistSort.lsp


ScalelistSortOhneXrefs.lsp

 
Hallo Wolfgang,
mit dieser Variante behalten bestehende Objekte mit Beschriftungsmaßstäben nach dem Sortieren ihre vorherigen Beschriftungsmaßstäbe.

Vielen, vielen Dank

Im Anhang sind nochmal beide Varianten:
ScalelistSort.lsp -> sortiert auch Xref-Maßstäbe
ScalelistSortOhneXrefs.lsp -> sortiert erst Xref-Maßstäbe dann interne Maßstäbe

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

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