| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Autodesk Inventor: Grundlagen, ein Seminar am 10.03.2025
|
Autor
|
Thema: Lisp umschreiben! (9785 mal gelesen)
|
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 08. Sep. 2004 14:56 <-- editieren / zitieren --> Unities abgeben:
Hallole, Cadwiesel hat mir mal bezüglich eines Forenbeitrages ein Lisp geschrieben welches alle Schraffuren in einer Zeichnung löscht. Geniales Teil für meine Zwecke. Kann jemand dieses Lisp umschreiben so das es anstelle aller Schraffuren alle Körper löscht? Kann sowas leider net... Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tulsa Mitglied Maschinenbauer/Selbstständig
Beiträge: 488 Registriert: 17.05.2004
|
erstellt am: 08. Sep. 2004 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 08. Sep. 2004 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Auswahl mit der Schnellauswahl "Volumenkörper" und dann "_erase" ? .. oder gehts dir auch um Verschachtelte Blöcke usw.. ? evtl . hilft dir das weiter :
Code:
(defun DELALL(OBJECTNAME / BLOCK ) (vl-load-com) (if (=(type OBJECTNAME)'STR) (progn (vlax-for LAYOUT (vla-get-layouts(vla-get-activedocument(vlax-get-acad-object))) (vlax-for ITEM (setq BLOCK (vla-get-Block LAYOUT)) (if(=(strcase(vla-get-objectname ITEM))(strcase OBJECTNAME)) (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list ITEM) ) ) ) ) ) (vlax-for BLOCK (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))) (vlax-for ITEM BLOCK (if(=(strcase(vla-get-objectname ITEM))(strcase OBJECTNAME)) (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list ITEM) ) ) ) ) ) ) ) (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports) )
Aufruf dann für dich (DELALL "AcDbSolid") ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 08. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 08. Sep. 2004 16:18 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Servus Versucht mal "Hatch" gegen "Body" zu tauschen (im Lisp) ------------------ schöne Grüsse aus der Steiermark Bernd P. Warum Einfach es geht auch kompliziert Bitte Supportangaben eintragen, warum siehst du hier Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 09. Sep. 2004 10:26 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 09. Sep. 2004 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
|
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 09. Sep. 2004 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Zitat: Original erstellt von Ralle: @cadmium Es geht vor allem um verschachtelte Blöcke. ...
@Ralle, ich gehe mal davon aus, dass die Symbolik des Beitrags nicht auf die beiden Antwortenden bezogen ist. Du hast CADmiums Code nicht getestet, geschweige denn angesehen und versucht zu verstehen, denn die paar Zeilen durchsuchen dir jeden Block, egal wie tief verschachtelt. Mit etwas (ich schreibe bewußt nicht mehr, denn da ist keines] Engagement hättest du dein Problem schon zu den Akten legen können, denn du brauchst nur im Befehlsaufruf das AcDbSolid gegen ein anderes Wort tauschen müssen. Desweiteren fällt mir folgende Frage ein: Was hast du im Vorfeld schon alles getan, um eine Lösung herbeizuführen? Du schreibst als Antort auf Bernds Beitrag, dass du es schon versucht hättest .. aber es funzt nicht. Schön, warum schreibst du das nicht sofort, so hat sich Bernd die Zeit genommen, das Tool angesehen und dir einen Tip gegeben. Zeit die hätte nicht sinnlos verbraten werden müssen, denn dann hätte er es sich durchaus mal unter diesem Gesichtspunkt angesehen. Der geleistete Support hier ist freiwillig und unentgeltlich, aber unbezahlbar! Das sollte man sich immer mal wieder vor Augen führen! Ich reagiere etwas garstig, weil ich es nunmal absolut nicht leiden kann, wenn hier jemand nur Forderungen und Wünsche äußert, selbst aber keine Anstrengungen unternimmt, um eine Lösung zu finden. Wenn du nun einmal nicht programmieren kannst, oder eben auch mit den Zeilen von CADmium nichts anfangen kannst, dann hätte eine Frage dazu sehrwohl gezeigt, dass du dich selber auch an der Lösung versuchst. @CADmium hättest ja wenigstens noch dazu schreiben können, an welcher Stelle geändert werden muss/kann/soll/darf. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! [Diese Nachricht wurde von Brischke am 09. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 09. Sep. 2004 12:00 <-- editieren / zitieren --> Unities abgeben:
@Holger Schlechter Tag heute was?! Dann lass deine Laune an nem anderen aus! Hab sogar reingeguckt (in den Quellcode! staun...). War das jetzt schon Eigeninitiative?? Auf die Idee das es evtl. reichen würde "Hatch" im Quellcode gegen irgendwas zu tauschen bin ich auchgekommen.
Leider hat mir der Begriff "Body" gefehlt (Bin anscheinend net so clever wie du :-( Aus Cadmiums Quelltext hab ich ne Lisp gemacht (dazu reichts noch, dachte ich?!) und auf meine Zeichnung losgelassen. Nichts hat sich getan. Vielleicht mein Fehler. Keine Ahnung. Auf jeden Fall wieder Eigeninitiative, verdammt. Aber aus seinem Zitat "oder handelt es sich auch um verschachtelte Blöcke" habe ich geschlossen das sich dieses Lisp eben nicht um Körper die sich in verschachtelten Blöcken befinden interressiert und deshalb nicht funktionieren kann. Was soll ich dann noch Fragen?! Abschließend kann ich nur nochmal sagen das ich sehr wohl mich selbst an der Problemlösung versucht habe. Auf jeden Fall soweit es mir möglich war. Auch wenn du es nicht so siehst. Auf jeden Fall weiterhin einen fröhlichen Tag 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: 09. Sep. 2004 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Ich glaube, hier läuft was ziemlich schief: Wenn mit "Körper" 3D-Volumenkörper gemeint sind, dann heisst das Entity in Lisp 3DSolid. In einem ActiveX-Programm muss man stattdessen allerdings die ActiveX-Klasse AcDb3DSolid verwenden - hier irrte Cadmium, als er "AcDbSolid" empfahl. SOLIDS sind gefüllte zweidimensionale Flächen mit 4 Ecken (Dreiecke sind darstellbar, wenn 2 Eckpunkte gleich sind). Der Vorschlag "BODY" von BerndP ist nun völlig falsch - das Entity BODY ist ein Zerfallsprodukt, das entsteht, wenn man 3D-Solids mit EXPLODE bearbeitet. Ein BODY ist übrigens nicht mit ActiveX erfaßbar! Ralle kann also überhaupt nichts dafür - man kann ihm doch nicht vorwerfen, dass er die Fehler, die andere gemacht haben, nicht sofort findet. Gruß, Axel Strube-Zettler Nachtrag: Kann aber auch sein, dass mit "Körper" wirklich "SOLID" gemeint sind (dieser Übersetzungsfehler erscheint in AutoCAD ja immer noch stellenweise). In diesem Fall müsste man ergründen, warum Cadmiums Programm nicht lief. Aber der Vorschlag "BODY" ist dann völlig daneben... ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze [Diese Nachricht wurde von mapcar am 09. Sep. 2004 editiert.] 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: 09. Sep. 2004 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Zitat: Original erstellt von Ralle: @Holger Schlechter Tag heute was?!...
@Ralle, kann sein/ kann aber auch nicht sein. Man ist nicht jeden Tag gleich gut/schlecht drauf. Wenn das jetzt zu hart für dich war, dann sorry. In Bezug auf - CADmiums Antwort hatte ich andere Fragen erwartet/erhofft, und nicht nur diese kurze Bemerkung zu diesem ausgezeichneten Code. - Bernd Ps Antwort finde ich es immernoch (und das nicht nur bei dir) ziemlich blöd, dass man es hier im Forum nicht für notwendig erachtet, die bisherigen Lösungsansätze zu posten. Oft laufen die Antworter in die gleichen Fallen, was (freiwillig aufgebrachte) Zeit kostet, und durch eine etwas umfangreichere Frage/ Darstellung der fehlgeschlagenen Lösungsversuche nicht passiert wäre. Dadurch wäre dann auch bereits im Vorfeld erkennbar gewesen, dass du aktiv an der Lösung mitarbeitest. Generell ist es ja nun so, dass derart knapp bemessene Postings ziemlich viel Spielraum für Interpretationen lassen. Ich habe nun deine Beitrage wie oben beschrieben interpretiert. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! 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: 09. Sep. 2004 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
So, gleich nochmal hinterher: Cadmiums Programm funktioniert, sowohl mit AcDbSolid als auch mit AcDb3dSolid, und das auch in verschachtelten Blöcken. Zu "Körper" noch mal meine Meinung: Das engl. Wort "SOLID" kann auf Deutsch alles Mögliche heissen, z.B. "fest", "massiv", "solide", "gediegen", aber auch "Festkörper" oder "Feststoff". Die wichtigste Übersetzung hier ist allerdings "voll" - und aus diesem Grunde wird man in den 80ern im englischen AutoCAD die Bezeichnung "SOLID" gewählt haben, ohne zu ahnen, dass Solids irgendwann in 3D-Zusammenhängen eine enorme Bedeutung gewinnen würden. Abwärtskompatibilität in allen Ehren - aber irgendwann ist dann Adesk Deutschlang auf die unselige Idee gekommen, "Solid" mit "Körper" zu übersetzen, und schlimmer noch, in der Hilfe war bei den "SOLIDS" auch immer mal wieder von "Volumenkörpern" die Rede. Man hat also in den Topf der möglichen Übersetzungen gegriffen und die dümmste gezogen. "Vollfläche" wäre z.B. wesentlich einleuchtender und weniger mißverständlich gewesen. Tja, nun müsste man wirklich wissen, um was es ging. Das Wort "Körper" ist wegen dieser Übersetzung unklar, allerdings fiel das Stichwort Schraffuren, und das legt "Solids" nahe, auch wenn ich (und wohl auch BerndP) da erstmal an 3D denken. Und auch Holger wohl, denn er sagte: > brauchst nur im Befehlsaufruf das AcDbSolid gegen ein anderes Wort tauschen Richtig, Holger. Aber einer, der sich nicht so auskennt, findet die Namen "AcDbSolid" oder "AcDb3dSolid" nicht in der AxtiveX-Hilfe, da heisst es plötzlich "AcadSolid" und "Acad3dSolid". Allerdings hätte natürlich der Fehlerbericht von Ralle _etwas_ auführlicher ausfallen können;-) Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 09. Sep. 2004 14:33 <-- editieren / zitieren --> Unities abgeben:
Habe einfach den Block aufgelöst und mir das Teil über die Eigenschaften angesehen und da stand halt "Körper" drin. Das war für mich eben eindeutig. Wenn Cadmiums Lisp funktioniert habe ich wohl nen Fehler gemacht! Dann werd ichs demnächst nochmal probieren. Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 09. Sep. 2004 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Die von mir gepostete Funktion funzt mit dem Aufruf(DELALL "AcDbSolid") in der von dir geposteten Zeichnung!!! P.S. bitte keine Umlaute in den Dateianhängen verwenden, das kompliziert das runterladen! ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 09. Sep. 2004 15:38 <-- editieren / zitieren --> Unities abgeben:
Befehl: Befehl: _appload DELALL.lsp erfolgreich geladen. DELALL.lsp erfolgreich geladen. Befehl: ; Fehler: Falsch formatierte Liste in Eingabe
Befehl: ; Fehler: Falsch formatierte Liste in Eingabe Befehl: Befehl: delall Unbekannter Befehl "DELALL". Drücken Sie F1-Taste für Hilfe. Hab den Quelltext in Editor kopiert, und als lsp abgespeichert. Unn nu? Was hab ich nu schon wieder falsch gemacht? 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: 09. Sep. 2004 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 09. Sep. 2004 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
|
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 10. Sep. 2004 07:37 <-- editieren / zitieren --> Unities abgeben:
@mapcar Ne, die Klammer wars net. Hab mit "delall" das Lisp aufgerufen und nicht mit (DELALL "AcDbSolid"). Das war alles :-( Danke für den Tipp. Wie kann ich an dem Quelltext erkennen das der Aufruf mit (DELALL "AcDbSolid") erfolgt? Hinter defun stand doch nur "delall"? Bisher waren alle Lisp-Aufrufe gleich dem Ausdruck der hinter defun im Quelltext steht. In den paar Lisp die ich mir angeguckt habe jedenfalls. @cadmium Vielen Dank für deine Mühe. Gruß Ralle 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: 10. Sep. 2004 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Hallo Ralle, (defun definiert eine Funktion. Wird dem Funktionsnamen, der nach dem (defun folgt, ein c: vorangestellt, dann kann dieser wie ein normaler AutoCAD-Befehl, durch eingabe des Namens ohne c:, aufgerufen werden. Beginnt der Namen jedoch ohne diese Zeichenfolge, dann muss dieser mit der bekannten Klammer-Syntax aufgerufen werden. Dann hat man jedoch die Möglichkeit Programmparameter mit zu übergeben. BSP: c: Code:
(defun c:HALLOWELT () (alert "Hallo Welt!") ) ;;Aufruf: ;Befehl:HALLOWELT
BSP: ohne c:Code:
(defun HALLO (WER / ) (alert (strcat "Hallo " WER)) ) ;;Aufruf: ;Befehl: (HALLO "Ralle") ;oder ;Befehl: (HALLO "DAU")
Alles klar? Willst du dich in die LISP-Programmierung reinschaffen, dann suche mal im Lisp-Forum nach interessanten Web-Seiten. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! [Diese Nachricht wurde von Brischke am 10. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralle Mitglied
Beiträge: 266 Registriert: 12.03.2003 Windows 10 Enterprise 64-Bit, 32GB MEP2018
|
erstellt am: 10. Sep. 2004 12:41 <-- editieren / zitieren --> Unities abgeben:
|
c@s Mitglied cad kommunikation
Beiträge: 269 Registriert: 07.08.2002 win 10<P> AutoCad 2018
|
erstellt am: 14. Nov. 2008 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
Hallo, Delall ist für mich sehr nützlich, zB. Schwerpunktlinien aus 3D Blöcken zu isolieren ... Schraffuren killen .... Ich würde gerne alle Polygonnetze löschen, bzw auch noch andere Objekte. Wo kann man denn die verschiedenen Ausdrücke für den Aufruf suchen/finden? AcDB.... Gruß Jochen ------------------ N W-|-O S Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Nov. 2008 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
mit der zeile : (vla-get-objectname(vlax-ename->vla-object(car(entsel "\nObjekt :")))) ------------------ - 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 |
c@s Mitglied cad kommunikation
Beiträge: 269 Registriert: 07.08.2002 win 10<P> AutoCad 2018
|
erstellt am: 14. Nov. 2008 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für Ralle
|