| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Umbenennen von Blöcken! (2649 mal gelesen)
|
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 14. Mai. 2004 11:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich muss Blöcke vor dem Einfügen in einer anderen Zeichnung umbennen. (Die Blocknamen von ganz unterschiedlichen Blöcken könnten evtl. mit denen in der neuen Zeichnung gleich sein!) Das untere Lisp BLOCK-RENAME von Th.Krüger konnte ich soweit anpassen, dass es mit einem Block klappt. Bei mehren Blöcken kommt aber die Fehlermeldung: "Automatisierungsfehler Doppelter Datensatzname" Wer kann Helfen?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 14. Mai. 2004 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für vision
ruf mal (progn (princ(strcat "\n"(rtos (* (getvar "cdate") 100000000) 2 0))) (princ(strcat "\n"(rtos (* (getvar "cdate") 100000000) 2 0))) ) auf .. und ? .. der Rechner zu schnell und liefert 2x das gleiche ? wenn ja, dann füge mal vor vor jedem umbenennen sowas ein (repeat 100000 nil) ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 14. Mai. 2004 11:49 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 14. Mai. 2004 21:04 <-- editieren / zitieren --> Unities abgeben: Nur für vision
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 14. Mai. 2004 23:34 <-- editieren / zitieren --> Unities abgeben: Nur für vision
Also das finde ich auch! (repeat 10000 nil) ... Aufpassen, sonst erscheinen Berichte, dass hier unschuldige nils gefoltert werden. Überhaupt, wo bleibt denn da der volkswirtschaftliche und sittliche Nutzen? Kann man da nicht ein paar SETI-Blöcke zwischendurch rechnen, oder schon mal nen Probelauf für das kommende Email-Porto? Aber da wird's ja so laufen wie mit den CO2-Emissionshandel: Da kann man dann wieder die Überhänge (oder muss das jetzt Unterhänge heißen?) verkümmeln. Wer ein (repeat 10000 nil) in seinem AutoLisp-Programm laufen lässt, darf dafür ein bisschen Spam verschicken;-) Ein ganz heisser Tipp: Zwei, drei Bögen mit TAN-Nummern fürs Online-Banking abtippen (oder einscannen) und als Blocknamen verwenden. Echt, da hat man die Garantie, dass man innerhalb von fünf Jahren keine doppelt kriegt! Ist doch auch völlig unökologisch, dass die gleich nach einmaliger Verwendung weggeworfen werden! Eigentlich gehört da Pfand drauf - ich werd's dem Trittin mal vorschlagen. Aber vielleicht sollte man in dem Programm auch einen Zufallszahlengenerator verwenden, der einmal ein SEED erzeugt, also einmal CDATE ausliest, und dann weitere Zahlen daraus generiert. Ich kann meinen hier leider nicht ohne weiteres posten, da er zu tief in meine Bibliotheken verstrickt ist - sorry, zu mühsam jetzt, alles da rauszuklauben. Aber gebrauchte TAN-Nummer habe ich noch - soll ich sie mal einscannen? Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... [Diese Nachricht wurde von mapcar am 14. Mai. 2004 editiert.] [Diese Nachricht wurde von mapcar am 14. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Mai. 2004 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für vision
... Kritik ist ja berechtigt. Und auch ein cdate-vergleich bis eine entsprechende differenz auftritt ist möglich, aber letztendlich ist es doch egal, mit was ich den Prozessor beschäftige, oder ? .. und (repeat 10000 nil) .. passt in eine kurze Zeile @Axel.. oder kennst du eine Möglichkeit, mit Lisp einen Windows-Task für eine bestimmte Zeit zu stoppen, so daß sich der Rechner anderen (meist nicht vorhandenen Aufgaben) zuwenden kann ? - das wäre ökonomisch ! Und Zufallszahlen .. die auch nur von cdate abhängen? Als Funktion , die auf cdate zurückgreift und eine Zahl zurückliefert macht keinen Sinn, also muß ich eine Liste von Zufallszahlen erzeugen erzeugen (würde im obigen Fall Sinn machen )oder global die letzte Zufallszahl speichern als Basis für die Berechnung der nächsten. @Axel Oder was für ein allgorithmus nutz du? .. und außerdem hab ich ja nicht mehr die "absoluten" Blocknamen... sondern welche, die sich, auch wenn statistisch unwahrscheinlich , wiederholen können.. Also was solls, das Problem ist gelöst, und darauf kam es doch vor allem an, oder ? ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 15. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 15. Mai. 2004 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für vision
<Jubel>riesigen Anlauf nehm und in Siegerpose auf den Knien über den Boden rutsch</jubel>Jaaaah, mapcar ist mal meiner Meinung!! <feier>mach eine Champus-Flasche nach der anderen auf</feier> .. ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 15. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Mai. 2004 14:18 <-- editieren / zitieren -->
Zitat: Original erstellt von mapcar: Aber vielleicht sollte man in dem Programm auch einen Zufallszahlengenerator verwenden, der [b]einmal ein SEED erzeugt, also einmal CDATE ausliest, und dann weitere Zahlen daraus generiert. [/B]
Bei einem Würfel kommt bei über 6maligem Würfel eine Zahl mindestens doppelt vor, und die Wahrscheinlichkeit, dass das schon bei zwei Würfen passiert, ist auch nicht gering. Zufallszahlen sind zufällig, aber nicht unitär. Dabei geht es doch ganz einfach: vor dem Umbenennen prüfen, ob der zufällige Name schon existiert, und wenn er schon existiert, solange (z.B. auch wieder über CDATE) einen neuen Namen kreieren, bis dieser unitär ist. Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
Ex-Mitglied
|
erstellt am: 15. Mai. 2004 14:20 <-- editieren / zitieren -->
Zitat: Original erstellt von CADmium: [BAlso was solls, das Problem ist gelöst, und darauf kam es doch vor allem an, oder ? [/B]
In in zwei Jahren hat der Fragesteller einen neuen schnelleren Rechner und wundert sich dann hier, warum sein Programm nicht mehr läuft :-) Das Problem ist nicht gelöst, sondern nur in die Zukunft verlagert. Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Mai. 2004 17:22 <-- editieren / zitieren --> Unities abgeben: Nur für vision
und warum muß ich jetzt bei den ganzen "Besserwissern" noch was posten? .... Also ersetze "zukunftssicher" die Zeile (setq NeuerName (strcat "WB" (rtos (* (getvar "cdate") 100000000) 2 0))) durch (While(or(not NeuerName) (tblsearch "BLOCK" Neuername) ) (setq NeuerName (strcat "WB" (rtos (* (getvar "cdate") 100000000) 2 0))) ) und alle sind zufrieden. Oder nicht? ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Mai. 2004 17:41 <-- editieren / zitieren -->
Zitat: Original erstellt von CADmium: und warum muß ich jetzt bei den ganzen "Besserwissern" noch was posten? ....Also ersetze "zukunftssicher" die Zeile (setq NeuerName (strcat "WB" (rtos (* (getvar "cdate") 100000000) 2 0))) durch (While(or(not NeuerName) (tblsearch "BLOCK" Neuername) ) (setq NeuerName (strcat "WB" (rtos (* (getvar "cdate") 100000000) 2 0))) ) und alle sind zufrieden. Oder nicht?
Na, wir wollen doch alle was lernen :-) Und wir Besserwisser woleln in Wirklichkeit doch alle nur geliebt werden :-)) In Deinem Code ist beispielsweise die Multiplikation völlig überflüssig. (rtos (getvar "cdate") 2 20) tut's ganz genau so gut. Und schon wieder haben wir Rechenzeit gespart. Gruß Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Mai. 2004 21:08 <-- editieren / zitieren --> Unities abgeben: Nur für vision
Zitat: Original erstellt von tom.berger: (rtos (getvar "cdate") 2 20) tut's ganz genau so gut...
Schon, aber 1. ist das nicht "mein Code" (ich wandel bei mir das cdate-Ergebnis noch in eine Zeichenkette auf Basis 36) 2. finde ich persönlich den Punkt im Dateinamen doof 3. (getvar "date") ist noch schneller als (getvar "cdate") 4. ist der Thread jetzt genug aufgelasen ---> sonst siehe Hier Ach so : und dann noch ein an alle Besserwisser ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 15. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HBo Ehrenmitglied Maschinenbaukonstrukteur
Beiträge: 1563 Registriert: 31.12.2001
|
erstellt am: 22. Mai. 2004 18:49 <-- editieren / zitieren --> Unities abgeben: Nur für vision
ich finde, den Blocknamen mit Datums-oder Zufallszahlen zu ergänzen genauso phantasielos, wie das was manche CAD-User machen wenn sie Blocknamen festlegen: Sie ziehen dann den Daumen einmal quer über die Tastatur. Ich habe mir für diese Fälle den Blocknamen verändern zu müssen, ein LISP gemacht, mit dem ich alle Blöcke in einer Zeichnung mit einer einzutippenden "Vorsilbe" ergänze. Dieser Zusatz wird dann so gewählt, daß er mir dann auch gleich einen Hinweis auf die Ursprungszeichnung gibt. Natürlich gibt es auch das LISP-Gegenstück, mit dem diese Zusätze wieder gezielt entfernt werden können. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 24. Mai. 2004 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für vision
Etwas spät, die Antwort, aber ich war eine Woche weg vom Fenster;-) Mein Beitrag hier sollte keine herbe Kritik sein, sondern mehr zum Amüsement beitragen... Jedenfalls stimme ich Tom zu (und darum gings mir ja auch), dass eine Rechenzeitverbrauchschleifenkonstruktion (schönes Wort, wa?) das Problem nur verlagert. Das ist wie eines dieser alten Spiele auf einem neuen Rechner: Man tippt die Cursortaste nur ganz leicht an, und trotzdem rennt das Männeken wie besessen los und semmelt vor die gegenüberliegende Wand... Ein Patch bring dann auch nur Abhilfe bis zum nächsten Prozessor-Upgrade. Zufallszahlen halte ich nach wie vor für das Mittel der Wahl (oder Durchnummerieren). In fast allen Programmiersprachen gibt es eine SEED-Funktion, die eine erste Zahl aus der Uhrzeit generiert, und weitere Funktion RANDOM, die dann aus der jeweils letzten Zahl eine weitere generiert. Natürlich können da Duplikate auftreten - ist ja meisten sogar gewollt. In diesem Fall muss man allerdings die Duplikate rausfiltern, was auch kein Problem sein sollte. Dass aber SEED mehrmals in einem Programm aufgerufen wird, ist eher als falsche Handhabung der Geschichte zu werten. In manchen Sprachen gibt es deshalb auch nur die RANDOM-Funktion, währen SEED beim ersten mal intern aufgerufen wird, aber dem Programmierer gar nicht direkt zugänglich ist. Wenn man schon praktisch denkt und sich gar nicht mit viel Theorie befassen will, dann würde ich einen ganz anderen Weg vorschlagen: Den Block beim Erzeugen "TMP" nennen, anschließend den Handle auslesen und dem Block dann seinen endgültigen Namen geben, der den Handle enthält. Damit ist man absolut sicher vor Duplikaten, hat also eindeutige Namen, und man verbrät keine Rechenzeit in Leerschleifen. Gruß, Axel
------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |