| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Kontrollfrage vor dem verlassen! (1775 mal gelesen)
|
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 01. Mrz. 2007 14:33 <-- editieren / zitieren --> Unities abgeben:
Folgende Problemstellung: Ich und zwei Kollegen erstellen Fertigungsskizzen für Arbeitsplatten. Bei bestimmten Platten müssen wir noch ein zusätzliches Programm bzw. eine zusätzliche Datei generieren, welche in einem bestimmten Verzeichnis liegen muss. Diese wird für eine Maschinensteuerung verwendet. Dieses ist aber nur erforderlich, wenn wir ein Symbol, welches als Block hinterlegt ist eingefügt haben. Nun, es wird häufiger vergessen diese Datei zu erstellen. Nun zu meiner Frage: Ist es möglich ein Programm zu schreiben, welches vor dem schließen überprüft, ob der block eingefügt ist und wenn ja frägt ob die Datei schon erzeugt ist oder nicht? Optimal wäre natürlich, wenn das Programm nicht nur danach fragen würde, sondern direkt in dem Ordner nachschaut, ob diese Datei vorhanden ist. (der Name der Zeichnung ist mit dem Namen der Datei identisch, es ist lediglich eine dxf und keine dwg) Wenn diese nicht vorhanden wäre sollte eine Meldung kommen! Ich bin mal gespannt, was die große Runde an Bastlern und Geniees so alles möglich macht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 01. Mrz. 2007 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Zitat: Original erstellt von steinwurm: Folgende Problemstellung: Ich und zwei Kollegen erstellen Fertigungsskizzen für Arbeitsplatten. Bei bestimmten Platten müssen wir noch ein zusätzliches Programm bzw. eine zusätzliche Datei generieren, welche in einem bestimmten Verzeichnis liegen muss. Diese wird für eine Maschinensteuerung verwendet. Dieses ist aber nur erforderlich, wenn wir ein Symbol, welches als Block hinterlegt ist eingefügt haben. Nun, es wird häufiger vergessen diese Datei zu erstellen.Nun zu meiner Frage: Ist es möglich ein Programm zu schreiben, welches vor dem schließen überprüft, ob der block eingefügt ist und wenn ja frägt ob die Datei schon erzeugt ist oder nicht?
JA.
------------------ - 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 |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 01. Mrz. 2007 14:38 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
|
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 01. Mrz. 2007 14:44 <-- editieren / zitieren --> Unities abgeben:
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 01. Mrz. 2007 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 01. Mrz. 2007 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
also im Prinzip so: 1. den sichern-Befehl mit eigenem Befehl überschreiben (defun c:sichern ...), oder mit einem Reaktor auf das Schliessen einer Datei reagieren. 2. nachschauen, ob block in Zeichnung existiert mit (tblsearch) oder (ssget x [Filterliste]) 3. wenn dann nachschauen, ob dxf existiert mit (findfile) 4. wenn nicht, dann dxf erzeugen 5. und sichern / beenden am Ende nicht vergessen Grüsse, Henning ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 01. Mrz. 2007 17:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, kling ja recht einfach, aber für nen Neuling wie mich! Ich habe jetzt einen Reaktor der auf das schließen reagiert. Das funktioniert. (defun R:AufWiedersehen ( A B / ) (alert "Auf Wiedersehen")) (vl-load-com) (VLR-DocManager-Reactor (vla-get-ActiveDocument (vlax-get-acad-object)) '((:vlr-documentToBeDestroyed . R:AufWiedersehen) ) ) Allerdings wars das dann auch. Wie kann ich überprüfen ob der Block (Name = ASS) existiert? Um zu Überprüfen ob die dxf existiert muss ja erst mal wissen wie die dwg heißt, und dann? Auf das Erzeugen kann ich verzichten, da nur eizelne Elemente ins dxf müssen und diese jedesmal komplett anders sind. Fehlermeldung mit alert so wie im Reaktor reicht! Bitte lasst mich nicht verzweifeln. Das ist für mich alles nur Bahnhof, sorry! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 01. Mrz. 2007 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Wronzky hat dir alle dafür nötigen Befehle rausgeschrieben... Es gibt zu jedem dieser Befehle fertige Beispiele hier im LISP-Forum - nun ist es an dir diese mittels der Suche zu finden und dann für deine Bedürfnisse umzubauen. Wenn das ganze Thema nämlich für dich Bahnhof ist, dann ist deine ganze Frage eine Beauftragung - und da hier mit Reaktoren herumgemacht wird - welche ein gefährliches Kapitel sind (wie du ja weist, da du den Beitrag von archtools gelsen und verstanden hast) - macht dir hier sicher keiner die Arbeit (noch dazu unbezahlt...) Wenn du nötigen Befehle in der richtigen Reihenfolge zusamnenstückelst (mit den entsprechenden Modifiakationen) dann kannst du ja gerne nochmal fragen falls es weitere Probleme gibt... ------------------ Grüsse Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 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: 01. Mrz. 2007 17:58 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Na hier aber nochmal einen kleinen Baustein: um herauszufinden, ob im Zeichnungsverzeichnis eine gleichnamige Datei existiert, nur dxf anstelle von dwg könnte man folgendermaßen machen: Code:
(if (findfile (strcat (substr (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")) 1(vl-string-search "." (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))) ".dxf")) (alert "DXF vorhanden") (alert "DXF nicht vorhanden"))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 01. Mrz. 2007 18:12 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Um sicherzustellen, dass DWG und DXF auf dem gleichen Stand sind, muss die Funktion IMHO beim Sichern und nicht beim Beenden durchgeführt werden. Nur so kann sichergestellt werden, dass DWG und DXF den gleichen Stand besitzen. Füge ich ansonsten einen Block ASS ein, verlasse dann aber mit QUIT, würde eine DXF erstellt, die DWG würde aber gar keine Blockref bzw. keine Block ASS enthalten. ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 01. Mrz. 2007 18:24 <-- editieren / zitieren --> Unities abgeben:
Jetzt habe ich schon das: (command "bereinig" "bl" "" "n") (cond ((tblsearch "BLOCK" "A$C783F64F9") ( (if (not (findfile (strcat (substr (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")) 1(vl-string-search "." (strcat (getvar "DWGPREFIX") (getvar "DWGNAME"))))".dxf"))) (alert "DXF für ASS bitte erstellen!"))))) Allerdings fehlt noch eine Kleinigkeit. Der Pfad der dxf ist nicht gleich mit der dwg, aber immer im gleichen Ordner. Die Aktualität spielt eigentlich keine Rolle, da die dxf nur einmal erstellt werden muss. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 01. Mrz. 2007 18:35 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Zitat: Original erstellt von steinwurm: ... Der Pfad der dxf ist nicht gleich mit der dwg, aber immer im gleichen Ordner.
Der Pfad ist nicht gleich aber immer im gleichen Ordner - mmh ? Meinst du, die DXF Datei befindet sich immer in einem bestimmten Ordner im Normalfall nicht der DWG Ordner, z.B. C:\DXF ? Ach, (vl-string-search "." <String> ) such immer das erste Vorkommen von links, das geht bei mehr als einem Punkt im Dateinamen ziemlich daneben. besser wäre z.B. (vl-filename-base filename) ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 01. Mrz. 2007 18:49 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 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: 02. Mrz. 2007 07:25 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Hallo Steinwurm, dann müßte es doch eigentlich so funktionieren: (den Serverpfad in der ersten SETQ-Anweisung müßtest Du anpassen) Code:
(setq serverpfad "K:\\Server\\") (command "bereinig" "bl" "" "n") (cond ((tblsearch "BLOCK" "A$C783F64F9") ( (if (not (findfile (strcat serverpfad (vl-filename-base(getvar "DWGNAME"))".dxf") )) (alert "DXF für ASS bitte erstellen!")))))
@Udo: wenn ich vl-filename-base man schon vorher gekannt hätte... ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Mrz. 2007 07:54 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
@Steinwurm da du hier ja ziemlich auf Krücken gehst, solltest du die Geschichte mit den Reaktoren gleich wieder vergessen. 1. wie Tunnelbauer in seinem 3. Beitrag schon sagte und 2. werden keine commandbefehle innerhalb einer Reactor-callback funktion ausgeführt. Widme dich dem Thema 'umdefinieren von Befehlen' und bastel etwas mit dem Quit, und open Befehl rum. ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 02. Mrz. 2007 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Zitat: Original erstellt von joern bosse:
@Udo: wenn ich vl-filename-base man schon vorher gekannt hätte...
schon mal (fnsplitl "D:\\ACAD\\BSP.DWG") versucht?
------------------ - 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 |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 02. Mrz. 2007 08:05 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 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: 02. Mrz. 2007 08:17 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Zitat:
schon mal (fnsplitl "D:\\ACAD\\BSP.DWG") versucht?
@ CADmium: Jetzt ja, super. Ich bin immer wieder aufs neue überrascht, was in meiner "Schatztruhe" so alles enthalten ist, ohne das davon etwas weiß. @ Steinwurm: wie hast Du denn Deinen Code vorher zum laufen bekommen, ich habe doch nur eine Zeile in Deinem Code geändert. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 02. Mrz. 2007 08:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ihr habt ja recht, ich kenne mich nicht wirklich aus, aber irgendwie muss das ja funktionieren. Wenn ich ein normales Programm habe und die Datei mit diesem Befehl schließe funktioniert es ja auch, oder? Kann ich in meinem Reaktor: (defun R:AufWiedersehen ( A B / );;Gespeichert in acad2007doc.lsp (alert "Auf Wiedersehen")) (vl-load-com) (VLR-DocManager-Reactor (vla-get-ActiveDocument (vlax-get-acad-object)) '((:vlr-documentToBeDestroyed . R:AufWiedersehen) ) ), dass beim schließen nicht nur Meldung auf Wiedersehen kommt, sondern das Programm test gestartet wird? Mein Programm wäre: (defun C:test ( / );;gespeichert in tool.lsp (lokal) (setq serverpfad "Y:\\DXF\\") (command "bereinig" "bl" "" "n") (cond ((tblsearch "BLOCK" "A$C783F64F9") ( (if (not (findfile (strcat serverpfad (vl-filename-base(getvar "DWGNAME"))".dxf") )) (alert "DXF für ASS bitte erstellen!"))))) (command "_save") (command "_close") ) Allerdings bekomme ich eben oben erwähnte Meldung sobal ich "test" starte. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 02. Mrz. 2007 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Hi, bitte formatiere die Codes, die du hier reinstellst und pack die "Code"-Tags drumrum. Und dann verweise ich auch nochmal auf Wiesel und Tuba:
Wer nicht so genau weiß, was er tut, sollte die Finger von Reaktoren lassen! Keine command-Aufrufe! Nochwas: Du willst das Dokument schließen, wenn es sowieso gerade geschlossen wird?! Kann mir nicht vorstellen, dass das funktionieren soll.
Die Fehlermeldung kommt wohl einfach daher, dass die Funktion nicht geladen ist. Gruß CADchup
------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 02. Mrz. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 02. Mrz. 2007 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
Hi, Also weil das mit den Reaktoren doch noch ein bischen komplex ist, würde ich zu der einfachen Variante greifen, _qsave neu zu schreiben: Code: (command "bflösch" "ksich") (defun c:ksich () (alert "Hier der code") (command ".ksich") )
Da kannst Du auch nach belieben (command...) verwenden.Grüsse Henning
------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steinwurm Mitglied
Beiträge: 36 Registriert: 04.12.2006
|
erstellt am: 06. Mrz. 2007 12:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich muss leider nochmal nerven. Bitte verzeiht es mir! Die Möglichkeit den Befehl "ksich" umzuschreiben ist klasse, allerdings wird dann das Programm ja auch gestartet, wenn ich während dem zeichnen nur auf speichern gehe. Daher habe ich versucht "schliessen" neu zu definieren: Code: (command "bflösch" "schliessen") (defun c:schliessen ( / ) (command "bereinig" "bl" "" "n") (.... .....) (command "bfrück" "schliessen") (command "_schliessen") )
Das "bfrück" habe ich eingebaut, damit beim Beenden die "normale" Frage (Fensterchen) kommt, ob Änderungen gespeichert werden sollen. Es soll genauso gefragt werden, wie wenn ich nur auf das kleine Kreuz "schliessen" drücke! Was mach ich da falsch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Mrz. 2007 12:16 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 06. Mrz. 2007 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Mrz. 2007 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für steinwurm
|