| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Zufallsgenerator? command _pasteclip (360 / mal gelesen)
|
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 07:35 <-- editieren / zitieren --> Unities abgeben:
Bei der Fehlersuch nach gelegentlichen Funktionsabbrüchen bin ich auf ein Verhalten gestossen, dass ich mit mit meinem Laienwissen nicht erklären kann. Würde mich freuen wenn mir jemand erklären kann wie es zu diesem Verhalten kommt, bzw wie man so ein Verhalten ausschließt / umgeht. Bei dem einzufügendem Element handelt es sich um einen Block mit Attributen, der von einem anderen Layout in der selben Zeichnung in das aktuelle, neu eingefügte Layout eingefügt werden soll. Teile von Funktion: (command "_copybase" (cdr(assoc 10 data)) ent "" ) ... (princ "\nPos.025") (princ "\np1") (princ p1) (command "_regenall") (while (= (setq ss (ssget "_x" (list (cons 0 "INSERT") (cons 410 (getvar "ctab")) (cons 2 "STEMPEL")))) nil) (princ "\nPos.025-1") (command "_pasteclip" p1) ) (princ(entget(entlast))) (princ "\nPos.026") Ausgabe im Textfenster: Pos.025 p1(168.807 87.3419 0.0) Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 ((-1 . <Objektname: 1f168665950> ) (0 . INSERT) (330 . <Objektname: 1f168674f30> ) (5 . 1C92D) (100 . AcDbEntity) (67 . 1) (410 . Layout2-Vorlage A2) (8 . 0) (100 . AcDbBlockReference) (66 . 1) (2 . STEMPEL) (10 168.807 87.3419 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Pos.026 Oder: Pos.025 p1(168.807 87.3419 0.0) Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 Pos.025-1 ((-1 . <Objektname: 1f178789b10> ) (0 . INSERT) (330 . <Objektname: 1f178785970> ) (5 . 1E041) (100 . AcDbEntity) (67 . 1) (410 . Layout1-Vorlage A2) (8 . 0) (100 . AcDbBlockReference) (66 . 1) (2 . STEMPEL) (10 168.807 87.3419 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Pos.026 machmal klappt es auch beim ersten mal. [Diese Nachricht wurde von gmds am 12. Sep. 2024 editiert.] [Diese Nachricht wurde von gmds am 12. Sep. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1766 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 12. Sep. 2024 08:22 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
Hallo gmds, ganz blicke ich da nicht durch, aber vielleicht helfen Dir folgende Funktionen, so in etwa würde ich es machen, ausprobieren musst Du es selber: Code:
(defun c:copyTest ( / ENT P) (if(and(setq ent (car(entsel "\nObjekt picken:"))) (setq p(cdr(assoc 10 (entget ent))))) (command "_copybase" p ent "") ) )(defun c:InsertTest ( / N P1 SS) (while (setq ss (ssget "_x" (list (cons 0 "INSERT") (cons 410 (getvar "ctab")) (cons 2 "STEMPEL")))) (setq n 0) (repeat (sslength ss) (setq p1 (cdr(assoc 10 (entget(ssname ss n))))) (command "_pasteclip" p1) (setq n (+ n 1)) ) ) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com das Flächenstempel_Tool(2023) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 08:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, vielen Dank für Deine schnelle Hilfe. Was ich nicht verstehe ist, inerhalb meiner while-Schleife, in der ich den Block aus der Zwischenablage sollange einfüge, bis er einmal vorhanden ist, kann sich doch weder die Variable p1 noch der Inhalt der Zwischnablage ändern? Warum wird er dan aber nicht immer beim ersten mal eingefügt? Kann es sein, das ein Zugrifff auf die Zwischenablage das Problem ist? Gruß, Georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 12. Sep. 2024 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
Hallo Georg, also bei mir funktionierte folgendes tadellos: Code:
(setq ent (ssget)) (setq data (entget (ssname ent 0))) (command "_copybase" (cdr(assoc 10 data)) ent "" ) (setvar "ctab" "Layout2") (setq p1 (list 0 0 0)) ; oder wie auch immer der Einfügepunkt festgelegt wird (command "_pasteclip" p1)
Da ist eigentlich nix von Schleife erforderlich. Vielleicht stellst Du uns mal eie Beispieldatei und den Code im Ganzen zur Verfügung? Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 11:54 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, Danke Dir für Deine Hilfe! Als ich noch keine Schleife eingebaut hatte funktionierte (command "_pasteclip" p1) auch wenn die Funktion im weiteren Verlauf abbrach da kein ensprechende Block vorhanden. Da somit klar war, das der richtige Block mit _copybase kopiert wurde und p1 auch den richtigen Wert hatte, habe ich die Schleife eingebaut. Ich kann mir nicht erklären, was sich ändert wenn die Schleife mehrfach durchgelaufen ist, so dass es dann plötzlich funktioniert. Hier die Funktion auf das wesentliche gekürzt: (defun testlayout( / i ss) (while (= ss nil) (setq ss (ssget "_x" (list (cons 0 "INSERT") (cons 410 "Layout_01") (cons 2 "STEMPEL")))) (setvar "ctab" "Layout_01") (setq i 0) (while(setq ent(ssname ss i)) (setq data(entget ent)) (command "_copybase" (cdr(assoc 10 data)) ent "" ) (setq i(1+ i)) ) (setvar "ctab" "Layout_02") (princ "\nPos.025") (setq p1 '(348.1214 104.9673 0.0000)) (while (= (setq ss (ssget "_x" (list (cons 0 "INSERT") (cons 410 (getvar "ctab")) (cons 2 "STEMPEL")))) nil) (princ "\nPos.025-1") (command "_pasteclip" p1) ) (princ "\nPos.026") ) (princ) ) Funktion in Layout "Layout_02" ausführen. Ich erhalte bei jedem Versuch eine unterschiedliche Anzahl von Durchläufen (Pos.025-1) [Diese Nachricht wurde von gmds am 12. Sep. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 12. Sep. 2024 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
Hallo georg, Ablauf bei mir: Befehl: (testlayout) Regeneriert Layout. Regeneriert Modell. Regeneriert Layout. Regeneriert Modell. Pos.025 Pos.025-1 Pos.026 Danach bin ich im Layout2 und der Block ist gesetzt. Also alles i. O. Es ist auch egal, wo Du den Befehl startest (Modell, Layout1, Layout2), da Du ja die entsprechenden Layoutschaltungen machst. Vielleicht irgendein Versions-Problem? Mit 2018 klappt es jedenfalls. Gruß Thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Sep. 2024 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
@Georg 1. Wenn mehrere Durchläufe erfolgten, ist dasnn wirklich nur eine Blockreferenz eingefügt? Ich kann es nicht reproduzieren, daher muss ich fragen. 2. Mit 2018 klappt es jedenfalls Ist dein 2025er aktuell? In der Doku zum aktuellen Produktupdate (AutoCAD) ist zwar nur Mechanical genannt worden, aber vielleicht ist die Doku an dieser Stelle ja einfach nicht perfekt und es gab ein generelles Problem, also auch in ACAD oder ACA. Befehl: INFO, die AutoCAD Produktversion 2025.1 ist aktuell. Ist diese bei dir Installiert? 3. Ich habe ein ungutes Gefühl bei deiner Codeanpassung bzw. Beispiel, daher noch einmal konkret nachgefragt: Öffne Aca erneut, öffne die hier von dir eingestellte Datei, copy& paste in die Befehlszeile deinen hier veröffentlichten Code, führe (testlayout) durch. Und falls es nur einmal zu 025-1 kam, lösche dir Blockreferenz und versuche es noch einmal..
Wenn bei dem Vorgang (genau so machen wir es) die x-fachen Durchläufe auftreten, dann passt das ja. Danke vorab für den Test und die Bestätigung.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 13:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, Danke Dir für Deine Mühe! Ich habe es noch mal mit ADT2023 ausprobiert, wieder unterschiedliche Anzahl von Durchläufen. Habe dann mal den Verlauf der Zwischenablage deaktiviert (https://www.microsoft.com/de-de/windows/tips/clipboard-history) und danach bei allen Tests nur ein Durchlauf. Verlauf von Zwischenablage wieder aktiviert, auch nur ein Durchlauf. Mehrere Bilder aus dem Internet kopiert, anschließend wieder unterschiedliche Anzahl von Durchläufen. Fazit für mich ersteinmal, "_pasteclip" nur in Schleife verwenden, bis sichergestellt, das auch eingefügt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 13:20 <-- editieren / zitieren --> Unities abgeben:
@cadffm Danke für die Nachfrage! zu 1.) auch wenn mehrere Durchläufe erfolgen, sind Anschließend nur zwei Blöcke dieses Typs vorhanden. zu 2.) müsste aktuell sein, siehe Anhang. zu 3.) genau so gemacht. "Wenn bei dem Vorgang (genau so machen wir es) die x-fachen Durchläufe auftreten, dann passt das ja" Wieso passt das? Es dürfte doch eigentlich immer nur ein Durchgang sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Sep. 2024 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
Hi, super, du hast das Problem gefunden - die Einstellung der Zwischenablage. Keine Ahnung ob es die Windows-Funktion oder eine Zusatz-App war, aber so ein Zwischenablage-Verlauf Ding hat mich auch schonmal wochenlang verarscht. >>"Fazit für mich ersteinmal" Wenn du den Verlauf nutzen willst (ich teste das jetzt nicht und nehme deine Ausführung als gegeben hin), dann bau dir doch deine eigene export/import-Funktion. Die Befehle sind -WBLOCK und -EINFÜGE oder fange an die Sache selbst über die Lisp API umzusetzen, ganz ohne "fremde" Befehle. Soll der Umbau weniger aufwändig sein, dann so (ungetestet): (setq el (entlast)) (while (= el (entlast)) (command "_pasteclip" p1) ) (princ "\nPos.025-1") Auch wenn es nichts mit dem aktuellen Fall zutun hat: Aktuell? Nein, es ist seit Monaten veraltet, es ist kein AutoCAD-Update installiert. ACA und ACAD Updates sind getrennt und müssen entsprechend beide gepflegt werden! Schau in deinem Account, dort hast du Zugriff auf das AutoCAD(!) Update 2025.1 (ob ACA aktuell ist, das habe ich jetzt nicht geprüft) Gruß S.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 14:44 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm:
Keine Ahnung ob es die Windows-Funktion oder eine Zusatz-App
Es ist die Orginal Windows-Funktion. Zitat: Original erstellt von cadffm:
dann bau dir doch deine eigene export/import-Funktion. Die Befehle sind -WBLOCK und -EINFÜGE oder fange an die Sache selbst über die Lisp API umzusetzen, ganz ohne "fremde" Befehle.
Mit -WBLOCK und -EINFÜGE müsste ich mich noch um die Attribute des Blocks kümmern, einfachheitshalber habe ich deshalb den Weg mit dem Kopieren gewählt. Lisp API ist für mich (noch) zu hoch. Zitat: Original erstellt von cadffm:
ACA und ACAD Updates sind getrennt und müssen entsprechend beide gepflegt werden!
Wieder was gelernt! Vielen Dank! Gruß, Georg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Sep. 2024 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
>>"Mit -WBLOCK und -EINFÜGE müsste ich mich noch um die Attribute des Blocks kümmern" Genau soviel oder genau so wenig wir über copy&paste. Dein Benutzen der Zwischenablage macht genau das, nichts anderes! Mit copyclip/cutclip oder den *base*-Variante wurd eine .DWG mit dem kopierten Inhalt erstellt, mit deinem paste Vorgang wird die DWG als als Block oder aufgelöster Block eingefügt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 12. Sep. 2024 15:13 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm:
>>"Mit -WBLOCK und -EINFÜGE müsste ich mich noch um die Attribute des Blocks kümmern" Genau soviel oder genau so wenig wir über copy&paste. [b]Dein Benutzen der Zwischenablage macht genau das, nichts anderes! Mit copyclip/cutclip oder den *base*-Variante wurd eine .DWG mit dem kopierten Inhalt erstellt, mit deinem paste Vorgang wird die DWG als als Block oder aufgelöster Block eingefügt. [/B]
Irgendetwas verstehe ich falsch, oder mache es falsch Wenn ich copy&paste verwende habe ich den Eingetragen Attributwert, wenn ich es mit -WBLOCK und -EINFÜGE probiere habe ich die Vorbelegung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Sep. 2024 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für gmds
Das hört sich so an als ob du nicht die Blockreferenz kopierst (wie du es auch per Zwischenablage machst), sondern eine Blockdefinition "als DWG" exportierst (also der umgekehrte Weg zu: eine DWG "als Block" einzufügen). Du kennst den WBLOCK Befehl also vermutlich nicht, oder nur Teile der Funktionen, kein Problem: EDIT, ergänzt: [F1] WBLOCK In dem Fall siehst du in dem Modellbereich deiner erstellten DWG die einzelnen Bestandteile deines Blockes. So eine DWG würde man als Vorlage für einen Block benutzen (KLASSISCHEINFÜG [Durchsuchen] oder auch EINFÜGE [die DWG einfügen]) Du möchtest aber eine Blockreferenz kopieren, daher "definiest du eine neue Zeichnung" und wählst die Blockreferenz. Auf diesem Weg wirst du in deiner neu angelegten DWG im Modellbereich genau das wiederfinden: Eine Blockreferenz mit den entsprechenden Attributwerten. Hier noch einmal als Beispiel, da der -WBLOCK Befehl per Hand ein anderer ist wie in der Automation, sowas kann man sich dann nur Stück für Stück erarbeiten, mit cmdecho ein - oder man erinnert sich
Befehl: (command "_.WBLOCK" "D:\\TESTX.dwg" "" PAUSE "_l" "") _.WBLOCK Namen der Ausgabedatei eingeben: D:\TESTX.dwg Namen des vorhandenen Blocks eingeben oder [= (block=ausgabedatei)/* (ganze zeichnung)] <Neue Zeichnung definieren>: Einfügebasispunkt angeben: Objekte wählen: _l 1 gefunden Objekte wählen: Befehl: nil Befehl: (command "_.INSERT" "*D:\\TESTX" PAUSE 1 0) _.INSERT Blocknamen eingeben oder [?] <*D:\TESTX>: *D:\TESTX Einfügepunkt für Block angeben: Skalierfaktor für XYZ-Achsen angeben: 1 Drehwinkel angeben <0>: 0 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmds Mitglied Zeichner
Beiträge: 15 Registriert: 05.02.2017 ADT 2025 Win 11
|
erstellt am: 13. Sep. 2024 09:33 <-- editieren / zitieren --> Unities abgeben:
|