Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Bereinigen als LISP oder Makro Frage

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Bereinigen als LISP oder Makro Frage (3427 mal gelesen)
BaCAD
Mitglied
Bauzeichner


Sehen Sie sich das Profil von BaCAD an!   Senden Sie eine Private Message an BaCAD  Schreiben Sie einen Gästebucheintrag für BaCAD

Beiträge: 129
Registriert: 17.09.2008

AutoCAD 2016

erstellt am: 11. Jul. 2013 17:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi

Ich habe bei uns im Büro schon einige Makros mit Hilfe dieses Forums machen könnte. Auch konnte ich hier und allgemein im Netz schon viele nützliche LISP-Befehle finden, die ich mit anwählbaren Buttons ins AutoCAD integriert habe.

Jetzt kommt es hier immer wieder vor, dass Ingenieure gewisse Pläne (oft auch fremde Pläne) in ihr Statik-Programm einlesen müssen. Dabei ist es wichtig, dass z. B. keine Blöcke mehr in den Zeichnungen sind, Bemassungen und wohl auch die meisten Texte sind auch nicht mehr wichtig, es wäre gut, wenn alles bereinigt wäre da sonst viel Müll mit importiert wird (leere Layer) und oft können sie nur ältere Versionen importieren.

Ich habe mir überlegt, warum das immer und immer wieder machen statt einfach mal den Versuch wagen ein Makro oder eine LISP zu erstellen, mit der man das mit einem Knopfdruck machen kann. Abgesehen, dass das wohl sehr schwer ist, habe ich a) keine Zeit im Büro und b) zu wenig Erfahrung.

Trotzdem hier ein Versuch:

Kurz und bündig:

1. alle Blöcke sprengen (auch die Blöcke von Blöcken)
2. alles bereinigen
3. Fehlerprüfung durchführen und die gefundenen Fehler auch beheben
4. Als alte Version speichern, am besten automatisch im selben Verzeichnis wie das aktuelle DWG/DXF einfach mit dem Zusatz _2000 hinter dem Dateinamen. Wenn die Originaldatei ein DWG ist ein neues DWG speichern, wenn es eine DXF-Datei ist eine DXF speichern.

Der Inhalt des Makro:
^C^C_explodeall;be;al;*;n;_audit;j;_saveas

Das funktioniert sogar. Zuerst habe ich nur be eingegeben für bereinigen, dann hat er manuell noch in der Befehlszeile für Optionen gefragt, die ich danach eingebaut habe (diese Befehle erscheinen sonst gar nicht sondern ein Fenster erscheint).

Für Punkt 1 hätte ich hier den LISP-Inhalt:

Zitat:
(defun c:EXPLODEALL(/ AWS L I OBJ)
  (while(and(setq AWS(ssget "_X" (list '(0 . "INSERT")(cons 410 (getvar "CTAB")))))
            (>(setq L (sslength AWS))0)
        )
    (setq I -1)
    (repeat L
      (setq OBJ(ssname AWS(setq I (1+ I))))
      (command "_explode" OBJ)       
    )
  )
  (princ)
)

Am Ende fragt er mich jetzt wo ich speichern möchte. Wenn ich mich nicht täusche, ist immer schon das aktuelle Verzeichnis gewählt. Fehlt nur noch der Name mit einem _2000 dahinter (also aus test.dwg wird test_2000.dwg) und das automatische speichern an sich.

Ist das schwer zu machen?

Oder ist es einfacher zu machen, dass die aktuelle Datei überschrieben wird in einer älteren Version? Dann müssten halt die Zeichner zur Sicherheit vorher die Datei kopieren was auch kein Problem wäre. Was gibt wohl mehr Aufwand?

Das würde mir fürs erste mal genügen.

Aber man könnte den Befehl ja noch ausbauen, einen XXL-Bereinigungsbefehl daraus machen:

Ausserdem frage ich mich, ob man den Befehl noch erweitern könnte mit beispielsweise folgenden Aktionen. Wie würden die einzelnen Bausteine aussehen zu folgenden Aktionen?

- via Schnellauswahl alle Bemassungen (egal ob Winkel, linear, ausgerichtet usw.) wählen und löschen
- auch alle Führungen oder die neue Multiführungslinie löschen
- alle texte und mtexte löschen

Optional:
- alle zur Zeit ausgeschalteten oder gefrorenen Layer mit ihrem Inhalt löschen
- Alle Referenzen die einen anderen Status als „geladen“ haben lösen (egal ob DWG, JPG usw.)

Wird wohl nicht alles kombiniert werden können, oder auf jeden Fall nicht so einfach.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadwomen
Ehrenmitglied V.I.P. h.c.
Mädchen für fast alles


Sehen Sie sich das Profil von cadwomen an!   Senden Sie eine Private Message an cadwomen  Schreiben Sie einen Gästebucheintrag für cadwomen

Beiträge: 2966
Registriert: 26.08.2002

ACAD R11 - 2022
(Plant3D)
AVIS
ACAD LT 2013- 2021
ZWCAD 2015 Versuch "nun ja"
[s]History P3D 2012/(13) SP und Hotfix([/s]<P>
Windows 10 / 64 Bit
Xeon CPU 3.5GHz
16GB Ram
NVIDIA Quadro P2000
3x Dell TV100 88P Monitore

erstellt am: 11. Jul. 2013 20:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für BaCAD 10 Unities + Antwort hilfreich

Hy

es fehlt in deinem Macro nur noch purge und gut wäre es dann doch ?

cw

------------------
Also ich finde Unities gut ... und andere sicher auch
------------------------------------------------
cadwomen™
Plant ist wie Öl suchen, je tiefer man bohrt desto mehr kommt ans Tageslicht

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 11. Jul. 2013 20:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für BaCAD 10 Unities + Antwort hilfreich

Das purge ist fertig eingebaut und heißt BE  

Was fehlt ist das speichern unter neuem Namen und das löschen nach Objekttypen.

Findest du alles hier im Forum, Google hilft beim finden.

(If (ssget. "_X" '((0 . "*Dimension,*leader*")))(command "_.erase" "_p" ""))

Die Objektnamen kannst du mit (assoc 0 (entgelt(car(entsel)))) abfragen und so deinen Lispausdruck anpassen.

Die Befehlsfolge bei Save oder SaveAs kannst händisch verfolgen wenn die Dateiwahldialoge ausgeschaltet sind: Systemvariable Filedia=0

Und dann wie
gewohnt eintippen.(nach dem Testen die Sysvar wieder auf 1 stellen)

Jetzt muß ich aber wieder weiter, meine Axt schärfen, ich muß Bäume fällen.

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

BaCAD
Mitglied
Bauzeichner


Sehen Sie sich das Profil von BaCAD an!   Senden Sie eine Private Message an BaCAD  Schreiben Sie einen Gästebucheintrag für BaCAD

Beiträge: 129
Registriert: 17.09.2008

AutoCAD 2016

erstellt am: 12. Jul. 2013 17:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die Informationen.

Das mit filedia war eine sehr gute Idee.

Mein Makro sieht jetzt so aus:

^C^Cai_selall;burst;be;al;*;n;_audit;j;_saveas;dxf;v;lt2000;16;"";j

Am Ende wird via „Speichern unter“ automatisch eine DXF-Datei Version 2000 gespeichert. Und das ist immer im selben Ordner wie die aktuell geöffnete Datei.

Die LISP-Datei ExplodeAll scheint, wenn man DWG-Referenzen geladen hat, nicht zu funktionieren. Daher habe ich mir überlegt, was ich sonst machen könnte. Dann kam mir die Idee: einfach alles markieren (_selall) und danach den Express Tool-Befehl „Explode Attributes“ anwenden (burst). Der Vorteil ist, dass die Blöcke in jedem Fall gesprengt werden, auch wenn sie keine Attribute aufweisen und es klappt auch mit Dateien, die Referenzen geladen haben. Ausserdem bleiben eben auch noch die Attribut-Inhalte bestehen.

Problematisch wäre hier nur, wenn es viele Blöcke in Blöcken gäbe. Es würden so nur die obersten Blöcke gesprengt. Ev. kann ich den Vorgang nach der Fehlerprüfung wiederholen als Schlaufe? Mal sehen.

Die zwei ““ stehen für die Enter-Taste auf der Tastatur. Denn das Programm fragt nach dem Speicherort und Namen. Normalerweise steht dort das aktuelle Verzeichnis und der aktuelle Name. Eine Eingabe wie *_2000.dxf oder *_2000 funktioniert leider nicht (falls man das Makro mit speichern statt mit speichern unter erstellen möchte). Hat da jemand eine Idee?

Auch wenn das Programm dann fragt ob die Datei schon existiere, man kann nur j wählen zum Überschreiben. Wenn man nein wählt bricht man alles ab.

Wenn man ein DXF speichert, wird man ja nach der Anzahl Dezimalstellen gefragt und normalerweise steht 16. Ich habe das einfach so übernommen im Makro. Ist das so gut oder was bedeutet das?

Die Schnellauswahl via Makro ist mir schon einige Male begegnet und ich muss mal den ganzen Aufbau studieren und auch schauen, wie man das alles nennt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 14. Jul. 2013 10:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für BaCAD 10 Unities + Antwort hilfreich

16 ist gut, damit legt man die Nachkommastellen fest, also im Grunde die Genauigkeit
und wenn nach dem Dateinamen gefragt wird: $M=$(getvar,prefix)$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dgname)),4))"_2000.dxf"

PS: "" als Enter ? Du verwendest im restlichem Makro ; als Enter - und das ist auch gut so !
Wenn ENTER benötigt wird im Makro, dann ;

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

BaCAD
Mitglied
Bauzeichner


Sehen Sie sich das Profil von BaCAD an!   Senden Sie eine Private Message an BaCAD  Schreiben Sie einen Gästebucheintrag für BaCAD

Beiträge: 129
Registriert: 17.09.2008

AutoCAD 2016

erstellt am: 15. Jul. 2013 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die Info.

$M=$(getvar,prefix)$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dgname)),4))"_2000.dxf"

Sieht kompliziert aus. Kann man irgendwo nachschauen oder lernen, was die einzelnen Teile bedeuten oder aussagen?

"" als Enter habe ich in einem englisch sprachigen AutoCAD-Forum gefunden und es funktioniert. Wenn ich statt "" ein ; eintippe, also so:

^C^Cai_selall;burst;be;al;*;n;_audit;j;_saveas;dxf;v;lt2000;16;;;j

Dann wird zwar ein DXF gespeichert, aber am Ende fragt er noch etwas, das man abbrechen muss. Mit "" geht es ohne diese komische Abbruch-Frage. 


Danke dir auf jeden Fall.


[Diese Nachricht wurde von BaCAD am 15. Jul. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Jul. 2013 13:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für BaCAD 10 Unities + Antwort hilfreich

Die Funktionen stehen alle in der Hilfe(F1) dokumentiert: DIESEL Funktionen

getvar - holt den Variablenwert
prefix - Variable in der sich der Dateipfad befindet
dwgname - Variable in der sich der Dateiname+Extension befindet
substr - verkürzt Zeichenkette AB Zeichen Nr.  / Anzahl Zeichen  (substr,WerWieWas ,2 , 6) => erWieW
strlen - Anzahl Zeichen einer Zeichenkette (strlen, WerWieWas) => 9

Alles anderen ist Mitdenken, das steht allerdings nirgends beschrieben,
da kann man sich nur anhand von Beispielen und eigenen Überlegungen entwickeln.
(verkürze DateinameMitExtension auf: 1.Zeichen bis (Gesamtzeichenlänge weniger 4) ) => Dateiname(ohne Extension)

(Extension samt dem Punkt als Trennzeichen = 4 Stellen. Zumindest in der guten alten DosWelt)

Code:

$M=
$(getvar,prefix)
$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dgname)),4)) ; Dateiname ohne Extension
"_2000.dxf" ; resliche Zeichenkette die ich fest vorgebe


------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz