| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Transformation NOW! 2024, eine Veranstaltung am 18.09.2024
|
Autor
|
Thema: Ergänzung Lisp-Routine für das automatische plotten benannter Ausschnitte ? (1145 mal gelesen)
|
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 AutoCAD2010, EPlan P8 2.8.1, Core I5 2400 3,1GHZ, 8GB Arbeitsspeicher
|
erstellt am: 30. Mai. 2001 20:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe seit längerem eine sehr nützliche Lisp-Routine mit der man benannte Auschnitte in einer Zeichnung automatisch plotten kann, z.B. bei Stromlaufplänen können es schon mal 60 bis 100 Blätter(Auschnitte) sein. Wir haben eine größere Zahl(60) von benannten Auschnitten in einer Vorlage abgespeichert die wir verwenden. Das Problem ist das das Lisp Tool auch wenn ich nur 20 Blätter benutze die restlichen Seiten plottet, leere Blätter auswirft. Wäre es möglich die Routine so zu verändern das z.B. vor jedem plotten eines Auschnitts, eine Abfrage erscheint die mit Return bestätigt werden muß, so das man steuern kann welche Auschnitte geplottet werden. Ich hab schon eine Anpassung versucht, das hat aber nicht geklappt, irgendwie hab ich wohl zu wenig Ahnung von Lisp-Programmierung. Hier nun die Lisp-Routine, wäre schön wenn sich das mal jemand ansehen könnte, Gruß, Jürgen ;; alle benannten Views plotten (defun Plotviews (/ bview bviewName) ;; alle benannten views durchgehen (while (setq bview (tblnext "VIEW" (not bview))) (progn (setq bviewName (cdr (assoc 2 bview))) (princ (strcat "\nDrucke nun " bviewName "-Ausschnitt")) (if (= (substr (getvar "ACADVER") 1 4) "15.0") (command "_plot" "_Y" "" "" "" "" "" "" "_V" bviewName "" "" "" "" "" "" "" "" "" ) (command "_plot" "_V" bviewName "0") ) ) ) ) (Plotviews) (princ) ;;end of lisp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 30. Mai. 2001 22:39 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Versuchs mal damit ;; alle benannten Views plotten (defun Plotviews (/ bview bviewName plot_JA_NEIN) ;; alle benannten views durchgehen (setq plot_JA_NEIN "JA") (while (and (setq bview (tblnext "VIEW" (not bview))) (= plot_JA_NEIN "JA") ) ;_ Ende von and (progn (setq bviewName (cdr (assoc 2 bview))) (princ (strcat "\nDrucke nun " bviewName "-Ausschnitt")) (if (= (substr (getvar "ACADVER") 1 4) "15.0") (command "_plot" "_Y" "" "" "" "" "" "" "_V" bviewName "" "" "" "" "" "" "" "" "") ;_ Ende von command ;_ Ende von command (command "_plot" "_V" bviewName "0") ) ;_ Ende von if (setq plot_JA_NEIN ;neu Anfang (Getstring "\nNächsten Ausschnitt plotten ? <J>/N : ") ) ;_ Ende von setq (if (or (= plot_JA_NEIN "JA") (= plot_JA_NEIN "ja") (= plot_JA_NEIN "J") (= plot_JA_NEIN "j") (= plot_JA_NEIN "") ) ;_ Ende von or (setq plot_JA_NEIN "JA") (setq plot_JA_NEIN nil) ) ;_ Ende von if ;neu Ende ) ;_ Ende von progn ) ;_ Ende von while (Plotviews) (princ) ) ;_ Ende von defun ;;end of lisp Gruß m-troeger ;-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 AutoCAD2010, EPlan P8 2.8.1, Core I5 2400 3,1GHZ, 8GB Arbeitsspeicher
|
erstellt am: 30. Mai. 2001 23:12 <-- editieren / zitieren --> Unities abgeben:
Hallo m-troeger, vielen Dank für die schnelle Antwort, ich hab das gerade mal ausprobiert, das Lisp startet aber nicht, und bei Dir geht es ? Gibt es etwas spezielles zu beachten dabei ? Gruß, Jürgen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 31. Mai. 2001 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo Jürgen, ich habe eine zusätzliche Abfrage reingebracht, ob der Ausschnitt gedruckt werden soll Ja/Nein. Wenn das mit "ja" beantwortet wird, dann geht es mit deiner If -Unterscheidung weiter. Bei Fragen... Grüße Holger ;; alle benannten Views plotten (defun Plotviews (/ bview bviewName) ;; alle benannten views durchgehen (while (setq bview (tblnext "VIEW" (not bview))) (progn (setq bviewName (cdr (assoc 2 bview))) (princ (strcat "\nDrucke nun " bviewName "-Ausschnitt")) (setq antw nil) (initget "Ja Nein") (setq antw (getkword (strcat "\nDrucke nun " bviewName "-Ausschnitt Ja/Nein <N>"))) (if (= antw "Ja") (if (= (substr (getvar "ACADVER") 1 4) "15.0") (command "_plot" "_Y" "" "" "" "" "" "" "_V" bviewName "" "" "" "" "" "" "" "" "" ) (command "_plot" "_V" bviewName "0") ) (princ (strcat "\nDrucke nun " bviewName "-Ausschnitt NICHT geplottet!")) ) ) ) ) (Plotviews) (princ) ;;end of lisp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 AutoCAD2010, EPlan P8 2.8.1, Core I5 2400 3,1GHZ, 8GB Arbeitsspeicher
|
erstellt am: 31. Mai. 2001 21:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, funktioniert wirklich wunderbar genauso wie ich mir das gedacht habe, Vielen Dank. Habs im ACAD14 + 2000 getestet. Jetzt muß ich mir das Autolisp doch mal selber genauer anschauen, es bringt wohl doch einiges wenn man da Ahnung hat ! Wie funktioniert das eigentlich wenn man das mit einem Befehl aufrufen möchte, bei anderen Lisps kann man nach dem einfügen das ganze durch einen Begriff starten ? So das man die Lisp-Routine im appload von AutoCAD vorlädt und der Befehl dann immer zur Verfügung steht. Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 01. Jun. 2001 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo Jürgen [ich nehme an Du heißt nicht wirklich Juergen55 ;-) ], um eine LISP direkt aus AutoCAD aufzurufen, wie einen normalen Befehl, mußt Du die Funktion wie folgt definieren: (defun c:BLABLABLA () ... ) Das "c:" bewirkt, dass der Befehl "BLABLABLA" direkt in der Befehlszeile eingegeben werden kann und die Routine startet. Dazu muß allerdings die LISP-Routine geladen sein, oder in dem Moment geladen werden, wenn der Befehl aufgerufen wird. Das Laden erfolgt mit dem Aufruf (load "LISPDATEI.lsp") Man sollte, jedoch, wenn wan sehr viele LISP-Funktionen benötigt, nicht alle Dateien Laden, da damit permanent Speicher belegt wird. Deshalb gibt es die Funktion (autoload ...) Die Syntax: (autoload "LISPDATEI.lsp" '("Befehl1" "Befehl2" ...)) Befehl1 u. Befehl2 stehen für die in der LISPDATEI mit (defun c:Befehl1 ()... definierten Befehle. Vorteil dieser autoload-Funktion ist, daß die Lispdatei erst beim Aufruf der Befehle geladen wird, also nicht die ganze Zeit Speicher belegt. Wie bekommt man AutoCAD nun dazu, das man diese Ladeanweisungen nicht von Hand in der Befehlszeile eintippen muß? Dazu sind diese (load...) und/oder (autoload ...) Anweisungen in der R14->acad.lsp R15->acad2000.lsp/acaddoc.lsp im Bereich (defun s::startup ...) einzufügen. Zweite Möglichkeit ist, diese Zeilen in der acad.mnl einzufügen. Diese MNL->Menülispdatei wird automatisch mit dem Laden des ACAD-Menüs geladen. Diese Variante ist also auch sinnvoll, wenn Du Dir ein eigenes Menü "gestrickt" hast, welches alle Deine LISP-Funktionen zur Verfügung stellt. Dann muß die mnl-Datei den gleichen Namen haben wie die mnu-Datei. Bei Fragen ... Grüße Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 AutoCAD2010, EPlan P8 2.8.1, Core I5 2400 3,1GHZ, 8GB Arbeitsspeicher
|
erstellt am: 02. Jun. 2001 00:00 <-- editieren / zitieren --> Unities abgeben:
|
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 AutoCAD2010, EPlan P8 2.8.1, Core I5 2400 3,1GHZ, 8GB Arbeitsspeicher
|
erstellt am: 24. Jun. 2001 13:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab mich jetzt etwas in das Autolisp eingearbeitet und eine eigene Version zum plotten der benannten auschnitte erstellt. Am Anfang wird noch abgefragt ob alle Auschnitte geplottet werden sollen, die vorhandenen Auschnitte in der Zeichnung werden angezeigt ! Gruß, Jürgen (defun c:T12 () (initget 1 "Ja Nein") (setq x (getkword "Alle Auschnitte plotten ? (Ja oder Nein) ")) (princ "Auschnitte in Zeichnung:") (setq t 1) (while (<= t 100) (setq e 1) (while (<= e 100) (setq bview(tblnext "VIEW")) (setq bviewN(cdr (assoc 2 bview))) (if (= x "Ja")(if (/= bview nil) (if (= (substr (getvar "ACADVER") 1 4) "15.0") (command "_plot" "_Y" "" "" "" "" "" "" "_V" bviewN "" "" "" "" "" "" "" "" "") (command "_plot" "_V" bviewN "0")))) (if (/= bview nil)(princ " ")) (if (/= bview nil)(princ bviewN)) (if (/= bview nil)(princ " ")) (setq e (1+ e)) ) (tblnext "view" T) (setq x "Nein") (setq n (getstring " Welcher Auschnitt ? ")) (if (= (substr (getvar "ACADVER") 1 4) "15.0") (command "_plot" "_Y" "" "" "" "" "" "" "_V" n "" "" "" "" "" "" "" "" "") (command "_plot" "_V" n "0")) (setq t (1+ t)) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolli Mitglied Konstrukteur
Beiträge: 704 Registriert: 28.02.2001 Win7 64Bit+32Bit VM-Ware I7 12GB ACAD Mech 2010 Inventor Pro 2010 + 2012 Ansys 13 NLS
|
erstellt am: 25. Jun. 2001 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Servus Zusammen, beim Lesen Eurer Beiträge gab es viele "AHA´s" und Achsoo´s" Ich habe vor einem Jahr bei der unserer Umstellung auf ACAD die Aufgabe bekommen das CAD zu betreuen, seitdem murkse ich mich so durch VBA und Lisp. Wer kennt denn gute Bücher für Anfänger zu diesen Themen, oder woher holt Ihr denn Euer Wissen? Gruss Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 25. Jun. 2001 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo Wolli, ich kann für meinen Teil sagen, daß ich reinweg nur mit der AutoCAD-Dokumentation arbeite. Angefangen habe ich mit den Büchern von R12. Diese fand ich sehr gut, die folgenden sind in meinen Augen immer schlechter geworden. Problem ist, daß man zwar alle Funktionen schön im Buch beschrieben sind, welche Eingangsgrößen und Rückgabewerte zu erwarten sind, was jedoch fehlt ist eine Beschreibung, wozu man diese Funktionen sinnvoll gebrauchen kann. Ich glaube das bringt nur die Erfahrung. Wenn ich mir die Programme anschaue, die ich vor 7 Jahren geschrieben habe, dann kann ich auch nur mit dem Kopf schütteln. Neue Anregungen oder Ideen der Herangehensweise bei der Lösung eines Problems bringt auch das Nachvollziehen einer Funktion im Quelltext, die jemand anders geschrieben hat. Nun weißt Du woher ich mein Wissen habe, auch wenn Dir das nur bedingt weiterhilft. -> nicht den Kopf in den Sand stecken und auch mal 3 Tage an einem Problem tüfteln, dabei lernt man so viele andere Sachen kennen, die man irgendwann mal gebrauchen kann. Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|