| | | 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: Index automatisieren / Attribut (0 . ATTDEF) in Block (0 . INSERT) Filtern nach Wert (1490 / mal gelesen)
|
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 02. Jul. 2021 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Mir fehlt das letzte Puzzlestück zum automatischen Indizieren unserer Dateien. Ich hatte ja hier: http://ww3.cad.de/foren/ubb/Forum145/HTML/004803.shtmlund hier: http://ww3.cad.de/foren/ubb/Forum145/HTML/003459.shtmlschon Fragen gestellt und bin, auf Grund eurer tollen Hilfe, jetzt fast am Ziel. Im Planstempel (siehe Anhang) gibt es ein Attribut (0 . "ATTDEF") mit der Bezeichnung (2 . "IND-1") und dem Inhalt (1 . "-"). Die Vorgabeeinstellung ist "-", was im Prinzip Index Planerstellung entspricht. (if (ssget "_X" (list '(0 . "ATTDEF")'(2 . "IND-1")'(1 . "-")(cons 410 (getvar 'CTAB)))) (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr")) Das wäre meine suche gewesen.. ich habe auch schon festgestellt, dass es so nicht geht, auf Grund von verschachtelten Elementen. Habe auch schon viel gesucht, aber meistens andere Lisp-Dateien gefunden die Attributwerte filtern. Ich hätte es gerne so: Wenn IND-1 = - und Blockname KD-Stempel-2010_A2-A0 dann _.SCRIPTCALL "KD-Stempel-Index-A.scr" Wenn IND-1 = A und Blockname KD-Stempel-2010_A2-A0 dann _.SCRIPTCALL "KD-Stempel-Index-B.scr" Wenn IND-1 = B und Blockname KD-Stempel-2010_A2-A0 dann _.SCRIPTCALL "KD-Stempel-Index-C.scr" usw. Der Rest ist alles fertig und funktioniert Einwandfrei. "KD-Stempel-Index-A.scr"
Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-ATT-TAG-IND-1-Index-A.lsp") (LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) SRXTEXT2 R ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.) $1A All All Y (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX") RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.) $1A _saveas 2018 (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A")
"KD-Stempel-ATT-TAG-IND-1-Index-A"
Code: (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) (defun c:UPDATE-Title-Block () (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen") (command "_.regenall") ) (C:UPDATE-Title-Block)
von Index B auf C kommt noch dieses Script dazu: KD-Stempel-ATT-TAG_IND-2_to_IND-1.scr
Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-COPY-ATT.lsp") KD-Stempel-COPY-ATT *KD-Stempel* IND-2 IND-1 KD-Stempel-COPY-ATT *KD-Stempel* DAT-IND-2 DAT-IND-1 KD-Stempel-COPY-ATT *KD-Stempel* NAME-IND-2 NAME-IND-1 KD-Stempel-COPY-ATT *KD-Stempel* ÄNDERUNG-IND-2 ÄNDERUNG-IND-1
Ich weiß, manch einer von euch wird jetzt die Hände über dem Kopf zusammen schlagen. Es geht bestimmt einfacher und eleganter, dass hier ist eher getreu dem Motto. "Der Weg ist das Ziel" Vielleicht hat ja einer von euch einen Codeschnipsel parat, den ich mir dann selbst noch etwas anpassen kann. Schönes WE allerseits. VG Manuel [Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 03. Jul. 2021 10:16 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Zitat: Original erstellt von Manuel486: Ich hätte es gerne so: Wenn IND-1 = - und Stempel KD-Stempel-2010_A2-A0 dann _.SCRIPTCALL "KD-Stempel-Index-A.scr" Wenn IND-1 = A dann _.SCRIPTCALL "KD-Stempel-Index-B.scr" Wenn IND-1 = B dann _.SCRIPTCALL "KD-Stempel-Index-C.scr" usw.
1. Das übliche: Sieh' Dir die Lisp Funktion COND an. 2. das Elegante: Sieh' Dir OR an Also: (OR (AND (= IND-1 "-") (= STEMPEL "KD-Stempel-2010_A2-A0") (setq SCRIPTNAME "KD-Stempel-Index-A.scr") ) ;; (AND (= IND-1 "A") (setq SCRIPTNAME "KD-Stempel-Index-B.scr") ) ;; usw ) ;; (if SCRIPTNAME (command "_.SCRIPTCALL" SCRIPTNAME)) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1458 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 04. Jul. 2021 18:20 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Und noch etwas für die Eleganz Wenn du dir die Attributnamen wie "IND-1" mit strcat aus "IND-" und (itoa Zahl) zusammenbaust brauchst du wahrscheinlich weniger Scripte weil du den Eintrag (also die Zeile in der Indextabelle) mit dieser Zahl steuern kannst. Wenn die Zahl direkt dem Index entspricht kannst du die sogar aus einer festen Liste holen. (1+ (vl-position "B" '("A" "B" "C"))) = 2 Irgendwie so ... Viel Spaß noch ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 05. Jul. 2021 12:04 <-- editieren / zitieren --> Unities abgeben:
Ich verstehe den Aufbau der Funktion. Ich weis aber nicht was ich angeben muss um kein Nil zu bekommen. Befehl: (= IND-1 "-") nil Befehl: (= STEMPEL "KD-Stempel-2010_A2-A0") nil Wie gebe ich den Attributwert bzw. den Blocknamen in Lisp an? (setq IND-1 (Funktion zum Auswerten von IND-1)) (setq STEMPEL (Funktion zum Auswerten von Blockname)) Sowas in der Art müsste an den Anfang der Lisp oder? Ich steh komplett auf dem Schlauch wie ich da anfange. Habe auch schon paar Lisp Tutorials durch. [Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.]
[Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020 Windows 11 Pro 64-Bit - Corsair 7000D Airflow - Asus ROG Maximus Z790 Hero - Intel Core i9-13900KS - Teamgroup T-Force 2x48GB DDR5 RAM @ 5600 MHz - Crucial T700 SSD 2TB M2 - Gainward NVIDIA GeForce RTX 4090 24GB - Corsair HX1000i - Corsair K55 RGB - Corsair Dark Core Pro - Corsair Void Elite Wireless - Corsair ST100 RGB - Elgato Stream Deck 15 Tasten - AutoCAD MEP 2023 - Revit 2021-2025
|
erstellt am: 06. Jul. 2021 08:28 <-- editieren / zitieren --> Unities abgeben:
Code: ;; Get Attribute Value - Lee Mac ;; Returns the value held by the specified tag within the supplied block, if present. ;; blk - [vla] VLA Block Reference Object ;; tag - [str] Attribute TagString ;; Returns: [str] Attribute value, else nil if tag is not found.(defun LM:vl-getattributevalue ( blk tag ) (setq tag (strcase tag)) (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes)) )
Habe hier was von Lee Mac, für den Attributwert. Eigentlich muss ich hier doch "nur" die Fett geschriebenen Sachen tauschen. Also für den tag = IND-1 und blk = KD-Stempel-2010_A2-A0 oder? Ergebnis: Zu wenig Argumente Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1458 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 06. Jul. 2021 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Nö ! Schau mal genau hin. Da steht als Kommentar: Zitat: ;; blk - [vla] VLA Block Reference Object
Das bedeutet dass du hier nicht einfach einen Blocknamen als Zeichenkette brauchst, sondern eine bestimmte Blockeinfügung als VLA-Object. Mit (car (entsel)) bekommst du ja den Elementnamen von dem was du angeklickt hast. mit (vlax-ename->vla-object (car (entsel))) bekommst du den Objectnamen (also das was du brauchst) Du kannst schon deshalb nicht einfach den Blocknamen nehmen weil damit ja gar nicht klar ist welche Einfügung du meinst. Wenn du was mit der Blockdefinition machen willst kommst du mit dem Blocknamen weiter, dann allerdings mit anderen Funktionen. Aber das brauchst du ja nicht Du brauchst das hier: (LM:vl-getattributevalue (vlax-ename->vla-object (car (entsel))) "IND-1") Und wenn du den Block nicht anklicken willst brauchst du da eben was mit ssget und einer Schleife zum Bearbeiten vom Auswahlsatz. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 07. Jul. 2021 17:10 <-- editieren / zitieren --> Unities abgeben:
Mit den Attributen im Block macht mich fertig. Da brauche ich zu viel Kenntnisse, die ich (noch) nicht habe. Das hier müsste zumindest die ssget Funtion sein die ich brauche?!
Code: (ssget "_X" '((0 . "INSERT")(2 . "KD-Stempel-2010_A2-A0")(66 . 1)))
Ich habe es jetzt über den Dateinamen versucht. Hier der Code aus dem Script:
Code: (setq DWGNAME (getvar 'dwgname)) (wcmatch DWGNAME "*--.dwg") (if T (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr")) (setq DWGNAME (getvar 'dwgname)) (wcmatch DWGNAME "*-A.dwg") (if T (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr"))
Funktioniert auch Jetzt läuft der Befehl aber einfach durch. Wenn ich jetzt z.B. Index "--" habe, macht er "-A" und auch direkt "-B". Wie sage ich "Stopp nach der ersten Ausführung"? Bzw wie könnte ich es cleverer aufbauen. Habe es jetzt so:
Code: (setq DWGNAME (getvar 'dwgname)) (setq INDEX-- (wcmatch DWGNAME "*--.dwg")) (setq INDEX-A (wcmatch DWGNAME "*-A.dwg")) (setq INDEX-B (wcmatch DWGNAME "*-B.dwg")) (if INDEX-- (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr")) (if INDEX-A (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr")) (if INDEX-B (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-C.scr"))
Geht, aber geht bestimmt besser, oder? VG Manuel
[Diese Nachricht wurde von Manuel486 am 07. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1458 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 08. Jul. 2021 07:43 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
archtools hat doch schon cond erwähnt. Code: (setq DWGNAME (getvar 'dwgname)) (cond ((wcmatch DWGNAME "*--.dwg") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr" ) ) ((wcmatch DWGNAME "*-A.dwg") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr" ) ) ((wcmatch DWGNAME "*-B.dwg") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-C.scr" ) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 08. Jul. 2021 10:34 <-- editieren / zitieren --> Unities abgeben:
Bekäme ich es hin aus dem Script "KD-Stempel-Index-A.scr" diesen Ablauf: Code: SRXTEXT2 R ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.) $1A All All Y
in einem Lisp zum laufen zu bekommen? Egal wie ich es schreibe, es läuft nur in einem Script durch wenn ich einfach SRXTEXT2 schreibe. Befehl: (SRXTEXT2) Zu wenig Argumente Befehl: ("SRXTEXT2") Fehlerhafte Funktion: "SRXTEXT2" Befehl: (command "SRXTEXT2") Unbekannter Befehl "SRXTEXT2". Drücken Sie F1-Taste für Hilfe. nil Oder geht das schlichtweg nicht? Ich sehe gerade hier https://www.cadstudio.cz/en/apps/srxtext/ Ich müsste es so schreiben.
Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX") (SRXTEXT2 "R" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
Dann findet er nichts, obwohl der zu ersetzende Text in der Zeichnung ist. Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/neu-Get-Value.lsp") Express Tools may be required for Regular Expressions in old SRXTEXT SRXTEXT2+SRXTEXTCSV+SRXMISSING commands loaded. (C)2020, www.cadstudio.cz ___________ CAD, BIM, GIS/FM custom application development _____________ 0 [Diese Nachricht wurde von Manuel486 am 08. Jul. 2021 editiert.]
[Diese Nachricht wurde von Manuel486 am 08. Jul. 2021 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: 10. Jul. 2021 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
|
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 12. Jul. 2021 12:16 <-- editieren / zitieren --> Unities abgeben:
Hi, ich suche nicht nach einem "Substring", Kürzel S. Ich Suche nach "Regular expression", deswegen auch Kürzel R, Habe es jetzt ausgeschrieben, aber findet auch 0. Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX") (SRXTEXT2 "Regular expression" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
EDITSo muss es geschrieben werden. Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX") (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
VG Manuel [Diese Nachricht wurde von Manuel486 am 12. Jul. 2021 editiert.] [Diese Nachricht wurde von Manuel486 am 12. Jul. 2021 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. Jul. 2021 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
|
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Jul. 2021 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Jörn, das probiert er doch, da mußt du mal konkreter werden (Bezug auf das konkrete Beispiel/Datei) EDIT
@Manuel Dein regulärer Ausdruck muß gequotet werden oder in einen Lispausdruck gepackt werden (der den String dann aber nicht verändert). (quote "MeinAusdruck") dasselbe nur eleganter '"MeinAusdruck" hätte ebenso den unveränderten String als Rückgabe: (strcat "MeinAusdruck") (eval "MeinAusdruck") 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. Jul. 2021 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Hallo Sebastian, ich dachte, es geht nur um das 1 Argument, was nicht akzeptiert wird?!? Befehl: (srxtext "Regular expression" (strcat(chr 92)(chr 92)) "|" "All") 0 Befehl: (srxtext "Regular" (strcat(chr 92)(chr 92)) "|" "All") 1 Ich habe einfach mal einen Text mit Backslash's erstellt und dann den Code ausprobiert, das funktioniert, wenn "Regular" als Argument übergeben wird und nicht bei "Regular expression". Bei inhaltlichen Sachen bin ich erstmal raus, weil ich da gar keine Ahnung von habe ------------------ viele Grüße Jörn http://www.bosse-engineering.com Bosse_tools-Überblick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 12. Jul. 2021 13:13 <-- editieren / zitieren --> Unities abgeben:
Habe meinen Post editiert, jetzt geht es. Stehe jetzt aber bei RRename vor einem ähnlichen Problem. Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX") (RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A")
Ergebnis: Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/TEST-RRENAME-Schreibweise.lsp") RRename command loaded. (C)2021, CAD Studio - www.cadstudio.cz______ CAD, BIM, GIS/FM custom application development _______ no function definition: RRENAME 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. Jul. 2021 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
|
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 13. Jul. 2021 09:04 <-- editieren / zitieren --> Unities abgeben:
|
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: 13. Jul. 2021 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Nö, dass heißt, das es keine von dir definierte Funktion namens RRENAME gibt bzw. diese zumindest nicht geladen ist. Die Funktion aus RRENAME.VLX ist ja als Kommando definiert, die aufzurufende Funktion in Lisp sollte demnach wohl C:RRENAME lauten, da hat dann aber keine Parameter. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de [Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.] [Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 13. Jul. 2021 10:10 <-- editieren / zitieren --> Unities abgeben:
|
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: 13. Jul. 2021 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Ich hab jetzt nicht den ganzen Beitrag im Detail gelesen, aber wenn das in Lisp definierte Kommando auf der Befehlzeile funktioniert, dann versuche es mal ohne die () Klammern, wie einen normalen Befehl. etwa so: RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 14. Jul. 2021 08:36 <-- editieren / zitieren --> Unities abgeben:
Geht leider auch nicht. Code: (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX") RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A"
Ergebnis: Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/TEST-RRENAME-Schreibweise-Kopie.lsp") RRename command loaded. (C)2021, CAD Studio - www.cadstudio.cz ______ CAD, BIM, GIS/FM custom application development _______ "$1A"
------------------ ________ Gruß Manuel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 14. Jul. 2021 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Da es ja keine Lispfunktion RRENAME gibt redest du jetzt aber wieder von einem Script, oder?Ich dachte eigentlich als Script hast du dein RRENAME bereits am Laufen gehabt Falls nicht: Der Suchausdruck erlaubt natürlich auch Leerzeichen, daher muß man hier ganz ordentlich ein Enter senden um den Regulären Ausdruck zu beenden, also einen Zeilenumbruch.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 14. Jul. 2021 10:41 <-- editieren / zitieren --> Unities abgeben:
Das ist ja das Ding, wenn es keine Lisp-Funktion bei RRename gibt, muss ich weiter mit meinen 26-Script und 26-Lisp arbeiten. Im Script habe ich die Befehle ja zum laufen gebracht. Ich wollte, in meinem Haupt-Lisp (KD-Stempel Index erhöhen.lsp) das hier umgehen.
Code: (cond ((wcmatch KD-DWGNAME "*--.dwg") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Index-A.scr" ) ) ((wcmatch KD-DWGNAME "*-A.dwg") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Index-B.scr"
Ich wollte den Scriptcall raus bekommen, ich habe bis Index Z geschrieben, also 26-SCR/LSP-Dateien. Das wäre mein Lisp (KD-Stempel-Index-A.lsp), was dann den Scriptcall ersetzten würde, was auch bis auf RRENAME Funktioniert... Es hängt quasi alles an diesem Befehl
Code: (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) (defun c:UPDATE-Title-Block () (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen") (command "_.regenall") ) (C:UPDATE-Title-Block) (LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX") (RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A") (setvar "cmdecho" 0) (setvar "filedia" 0) (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A")) (setvar "filedia" 1) (setvar "cmdecho" 1)
Wäre echt doof, mit 55 .scr/.lsp, habe gerade nochmal gezählt, Dateien Arbeiten zu müssen.
------------------ Gruß Manuel [Diese Nachricht wurde von Manuel486 am 14. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 14. Jul. 2021 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
>>"Im Script habe ich die Befehle ja zum laufen gebracht." Das hatte Udo sicher beim überfliegen nicht richtig gesehen, daher sein Post - der nicht für die Verwendung in einer Lispdatei gedacht war. Es gibt da immernoch mehrere (andere) Möglichkeiten für dich (Der Fokus ist ab und an eine Scheuklappe die das Sehen behindert ) und auch wenn ich dir nichts zu Füßen legen möchte wie andere Tools, Hilfe zur Selbsthilfe immer wieder gern:
>>"muss ich weiter mit meinen 26-Script und 26-Lisp arbeiten." Warum sagt mir mein Kopf: Da reicht auch EIN Script für RRENAME.. ein Script mit 26 RRENAME-Aufrufen Schau dir vielleicht noch einmal dein SUCH-Muster an, vielleicht wäre es sinnvoller nach einem bestimmten Index zu suchen und diesen zu ersetzen, statt egal-welcher-Index mit "A" ( oder "B" usw. wie du es derzeit machst) Aber wenn du jetzt nicht weiterkommst, dann ist es vielleicht nicht schlecht und endlich der (Zeit)Punkt wieder bei Null anzufangen und sich mit (+ 1 2) zu beschäftigen - usw. Du weißt bescheid. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 15. Jul. 2021 08:26 <-- editieren / zitieren --> Unities abgeben:
>>"Schau dir vielleicht noch einmal dein SUCH-Muster an, vielleicht wäre es sinnvoller nach einem bestimmten Index zu suchen und diesen zu ersetzen" Wenn man es so hört, dann fragt man sich, warum man es nicht gleich so gemacht hat. Code: (DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK) (setq sset (ssget "x" (list (cons 2 BLOCKNAME)))) (if (= sset nil)(setq l 0)) (setq l (sslength sset)) (setq i 0) (repeat l (setq iBLK (ssname sset i)) (SETQ VALUE (GET-ATT FROMatt iBLK)) (PUT-ATT iBLK TOatt VALUE) (setq i (1+ i)) ) ) (DEFUN GET-ATT (tag blk / val enx) (WHILE (AND (NULL val) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))) ) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (SETQ val (CDR (ASSOC 1 enx))) ) ) ) (DEFUN PUT-ATT (blk tag val / end enx) (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx)) (PROGN (ENTUPD blk) (SETQ end val)) ) ) ) )
(DEFUN C:KD-Stempel-COPY-ATT (/ BLOCKNAME FROMatt TOatt) (SETQ BLOCKNAME (GETSTRING "\n\t=> Block name? ") FROMatt (GETSTRING "\n\t=> FROM attribute tag? ") TOatt (GETSTRING "\n\t=> TO attribute tag? ") ) (COPY-ATT BLOCKNAME FROMatt TOatt) ) (C:KD-Stempel-COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") (DEFUN C:KD-Stempel-COPY-ATT () (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") (COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1") (COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1") (COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1") ) (C:KD-Stempel-COPY-ATT)
EDIT: Habe es umgeschrieben. Habe jetzt auch kapiert was mein Fehler war. Dann noch etwas. Ich habe nach ((wcmatch KD-DWGNAME "*-B.dwg") .....
erst ein (LOAD ..... und dann kommt ein Lisp (defun UPDATE-Title-Block ..... Er bearbeitet aber zuerst das Lisp und setzt den Load an den Schluss Wie kann ich denn hier die Reihenfolge angeben, bzw. wie kann ich mehrere Befehle in wcmatch zusammenfassen? ------------------ Gruß Manuel [Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.] [Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Jul. 2021 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
>> [EDIT: Habe es umgeschrieben.] SORRY, meine Antwort war schon im Entstehen - jetzt poste ich diese auch (hoffent auf..) Passt also auf den Post vor deinem EDIT, aber nicht mehr zur aktuell editierten Version. Ergebnis: Zu viele Argumente Es sind doch die 3 Argumente die abgefragt werden 1. Wenn man Argumente übergeben möchte, dann ist es nicht sinnvoll die Funnktion als AutoCAD-Befehlsaufruf zu definieren (Funktionsnamen die mit "c:" beginnen), denn als Befehl gestartet kann man ohnehin keine Argumente übergeben, also: "c:" im Namen weg (welches Aussagt das diese Funktion als AutoCAD-Befehl definiert werden soll). 2. Die Variablen wurden als lokale Variablen deklariert, die Funktion erwartet also genau KEINE Argumente. (die Variablennamen stehen rechts vom Backslash, als erwartete Argumente müßten diese am Anfang bzw. links vom Backslash stehen) Aber macht es Sinn über soetwas wie Argumente und lokale Variablen zu reden? Aktuell denke ich: Nein Die Antwort könnte auch so ausfallen: C:KD-Stempel-COPY-ATT ist super als AutoCAD-Befehl, also Befehl starten und den Anweisungen folgen, lediglich der Befehlsname ist Quatsch, denn der Befehl ist ja allgemeingültig und hat nichts mit Dörflinger und den Planköpfen zutun. Auch bei "C:COPYCAT3" sehe ich keinen Sinn, aber ok.
(C:KD-Stempel-COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") Kann nicht funktionieren da C:KD-Stempel-COPY-ATT keine Argumente erwartet, es sind nur lokale Variablen definiert. Zudem macht die Funktion Null Sinn, denn genau dafür hast du ja bereits die Funktion COPY-ATT und die erwartet auch drei Argumente, (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") Dann noch etwas. Ich habe nach ((wcmatch KD-DWGNAME "*-B.dwg") ..... erst ein (LOAD .....Das sagt nur das lesen eine Lispdatei(vlx,fas,lsp) aus, nicht aber was passiert. Da kommt es auf den Inhalt der Datei an. und dann kommt ein Lisp (defun UPDATE-Title-Block ....."dann kommt ein Lisp" zeigt schon etwas Verwirrung auf. Es ist ein Lispausdruck der eine Lispfunktion definiert Er bearbeitet aber zuerst das Lisp Alles in deiner Beschreibung ist "Lisp" und setzt den Load an den Schluss mit Sicherheit nicht, aber um darüber vernünftig zu reden bräuchte man halt alle Information Sicher wird bei (load...) die Datei gelesen und gemacht was darin steht. Danach wird die Funktion UPDATE-Title-Block definiert was sicher aber wenig sinnvoll anhört - zumindest wenn es noch in dem Zusammenhang mit "wcmatch" steht. Aber auch hier: Man muß viel interpretieren, denn du legst nicht alle nötigen Fakten dar. Wie kann ich denn hier die Reihenfolge angeben, In Lisp wird von oben nach unten, innen nach außen, links nach rechts abgearbeitet und so bestimmt man dann auch *irgendwelche* Reihenfolgen. Warum du etwas anderes erwartest wie passiert, das lässt sich nur sagen wenn man den Code kennt und was du möchtest. Der Code ist hier aber aktuell unbekannt bzw. wie kann ich mehrere Befehle in wcmatch zusammenfassen? mit wcmatch lässt sich weder ein Befehl ausführen noch mehrere zusammenfassen!? Ich nehme an hier fehlt wieder die Hälfte an Informationen.. Ich rate mal (denn ich werde jetzt nicht über dein Profil und Suchfunktionieren versuchen die vermissten Puzzlestücke zu suchen): Du hast irgendwo eine IF-Anweisung, vielleicht auch 26 Stück, in dieser Art: (if (wcmatch "X" "U") 'machdasA) Jetzt möchtest du, falls ein X einem U entspricht, mehrere Funktionen ausführen lassen? Dann schau dir PROGN an [F1] Wenn du diese wcmatch-Zeile 26x hast, dann könnte auch der Hinweis aus COND statt IF die bessere Lösung sein, cond findet man natürlich ebenso in der Hilfe [F1]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 15. Jul. 2021 11:36 <-- editieren / zitieren --> Unities abgeben:
Das ist jetzt der fertige Code bis Index-C, danach widerholt sich alles Index-D...E usw. Code: ;;;KD-Stempel Index erhöhen.lsp ;;;Ver. 1.1 ;;;Manuel Faust, 07/2021 ; ; ; ;CMDECHO (Systemvariable), Deaktiviert die Protokollierung. / ; (setvar "cmdecho" 0) ; ; ; ;Liest den DWG-Namen mit Dateiendung aus / ; (setq KD-DWGNAME (getvar 'dwgname)) ; ; ; ;Eine Liste von Bedingungen wird erstellt / ; (cond ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------A ; ;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus / ; ((wcmatch KD-DWGNAME "*--.dwg") ; ; ; ;Index-A erstellen ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) (defun c:UPDATE-Title-Block () (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen") (command "_.regenall") ) (C:UPDATE-Title-Block) ;_________________________________________________________________________________________________________________________ ; (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") (setvar "cmdecho" 0) (setvar "filedia" 0) (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A")) (setvar "filedia" 1) (setvar "cmdecho" 1) ) ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------B ; ;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus / ; ((wcmatch KD-DWGNAME "*-A.dwg") ; ; ; ;Index-B erstellen ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) (defun c:UPDATE-Title-Block () (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "B") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2" "B") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2" "Anpassungen und Ergänzungen") (command "_.regenall") ) (C:UPDATE-Title-Block) ;_________________________________________________________________________________________________________________________ ; (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1B" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") (setvar "cmdecho" 0) (setvar "filedia" 0) (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "B")) (setvar "filedia" 1) (setvar "cmdecho" 1) ) ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C ; ;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus / ; ((wcmatch KD-DWGNAME "*-B.dwg") ; ; ; ;Index-C erstellen ; (DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK) (setq sset (ssget "x" (list (cons 2 BLOCKNAME)))) (if (= sset nil)(setq l 0)) (setq l (sslength sset)) (setq i 0) (repeat l (setq iBLK (ssname sset i)) (SETQ VALUE (GET-ATT FROMatt iBLK)) (PUT-ATT iBLK TOatt VALUE) (setq i (1+ i)) ) ) (DEFUN GET-ATT (tag blk / val enx) (WHILE (AND (NULL val) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))) ) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (SETQ val (CDR (ASSOC 1 enx))) ) ) ) (DEFUN PUT-ATT (blk tag val / end enx) (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx)) (PROGN (ENTUPD blk) (SETQ end val)) ) ) ) ) (DEFUN C:COPY-ATT () (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") (COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1") (COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1") (COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1") ) (C:COPY-ATT) ;_________________________________________________________________________________________________________________________ ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) (defun c:UPDATE-Title-Block () (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "C") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2" "C") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2" "Anpassungen und Ergänzungen") (command "_.regenall") ) (C:UPDATE-Title-Block) ;_________________________________________________________________________________________________________________________ ; (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1C" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX") (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") (setvar "cmdecho" 0) (setvar "filedia" 0) (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "C")) (setvar "filedia" 1) (setvar "cmdecho" 1) )
Jetzt habe ich insgesamt 4 Dateien, (2x VLX / 1x SCR / 1x Hauptlisp) anstatt fast 60. Vielen dank für eure tatkräftige Unterstützung. ------------------ Gruß Manuel [Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Jul. 2021 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
1. "Das ist jetzt der fertige Code bis Index-C, danach widerholt sich alles Index-D...E usw. DANKE "danach widerholt sich alles Index-D...E" DAS bezieht sich auf den vorherigen Abschnitt für "Index-C" nehme ich an? Okay, ich nehme deine Aussage ernst, also D-Z ist, bis auf den Indexbuchstaben, als wie für C.2. OhJe 3. Dann wollen wir mal.. Meine Antwort erfolgt in zwei Teilen, Teil.1 kommentiert deine Version, Teil.2 ist eine (ungetesteter) alternative Variante. Teil.1
Code:
(cond ((wcmatch KD-DWGNAME "*--.dwg") ; ; ; ;Index-A erstellen ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) .. Diese Funktion UPDATE-Title-Block steht 26x identisch in der Datei, sieht unnötige aus - und ist es auch. Die Funktion UPDATE-Title-Block gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. {EDIT, im Fall von Index - zu A und A zu B ist die Aussage nicht gnaz passend, aber für C - Z gilt es so} .. ) (defun c:UPDATE-Title-Block () <- Hier einen AutoCAD-Befehl zu definieren um diesen nur EINMAL auszuführen ist nicht sinnvoll selbst also Lispfunktion ohne c: im Namen macht es bei einmaligem Aufruf keinen Sinn diese zu definieren. Die fünf Zeilen (UPDATE-Title-Block...) wären ausreichend, spart Platz und theoretisch auch Performance und Speicher (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen") (command "_.regenall") Macht wohl in deinem Fall hier keinen Sinn und wenn, dann gehört es nur einmal ans Ende der Datei ) (C:UPDATE-Title-Block)diese Zeile würde dann auch entfallen ;_________________________________________________________________________________________________________________________ (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX") (setq _SRXTEXTNOZOOM 1) Diese zwei Zeilen (über dieser hier) gibt es 26x identisch in der Datei? Sieht unnötige aus - und ist es auch. Die beiden Zeilen gehören in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehören die raus, auch aus dem Index A, B, C oder Z -Bereich. (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX") Diese Zeile steht 26x identisch in der Datei, sieht unnötige aus - und ist es auch. Die LOAD-Anweisung gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") Jetzt bin ich verwundert, da hast du nach meinem Wink wohl eine andere Lösung gefunden, aber nicht DIE Lösung.. Meinen Satz "Schau dir vielleicht noch einmal dein SUCH-Muster an," hast du dir zu Herzen genommen, aber was ist mit " Da reicht auch EIN Script für RRENAME.. ein Script mit 26 RRENAME-Aufrufen " ?
Ich dachte in dem Moment an folgendes: In deiner Lispdatei führst du nur noch ein und dasselbe Script aus für RRENAME, Aufbau der Scriptdatei: 26 Wiederholungen für Ersetze Y durch Z Ersetze X durch Y usw.. EIN Script, was RRENAME korrekt durchführt, egal welcher valide Index aktuell im Layoutnamen steht. SO dachte ich es.. Erspart dir hier nicht den Aufruf des Scriptes, aber du hast nur noch ein Script statt 26 (setvar "cmdecho" 0) Wofür ist das gut?, wenn-dann gehört das einmal ans Ende der Datei und nicht an 26 Stellen (setvar "filedia" 0) Wofür ist das gut? Die Einstellung kann genau GAR NICHTS in Scripten und Commands.. außer Ärger verursachen ;) (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A")) (setvar "filedia" 1) Wenn man es nicht auf 0 stellt, braucht man es auch nicht wieder auf 1 stellen. ganz streng genommen ist es sogar falsch, denn wenn man das Lisp hier startet wärend Filedia auf 0 steht, dann veränderst du ja die Einstellung welche die Variable vor Start hatte. Ja klar, es gibt eh nur einen einzigen mir bekannten Menschen der mit Filedia=0 arbeitet und alle normalen Menschen arbeiten ohnehin mit FileDia=1, aber ein Programm sollte Variablen nur verändert hinterlassen, wenn das Programm auch dafür da ist. (setvar "cmdecho" 1) Warum stellst es am Anfang der Datei auf 0 und dann immer wieder hin und her? Du benutzt einmal command für das speichern und das willst du nicht sehen, also stelle cmdecho einmal gaaanz oben auf 0 (hast du)und gaaaanz unten auf 1 - wenn du das willst - sollte dann ausreichen, oder? ) ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------B ; ;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus / ; ((wcmatch KD-DWGNAME "*-A.dwg") ; ; ; ;Index-B erstellen ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) .. wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert .. ) (defun c:UPDATE-Title-Block () <-- wie oben kommentiert, am besten Zeile löschen. (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "B") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2" "B") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2" "--.--.--") (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2" "--. / --.") (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2" "Anpassungen und Ergänzungen") (command "_.regenall")<-- wie oben kommentiert, am besten Zeile löschen. )<-- wie oben kommentiert, am besten Zeile löschen. (C:UPDATE-Title-Block)<-- wie oben kommentiert, am besten Zeile löschen. ;_________________________________________________________________________________________________________________________ ; (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert (setq _SRXTEXTNOZOOM 1)<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1B" "All") (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") <-siehe oben, immer wieder ein und das gleiche Script würde ausreichen (setvar "cmdecho" 0)<-wie oben kommentiert - unnötig (setvar "filedia" 0)<-wie oben kommentiert - unnötig (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "B")) (setvar "filedia" 1)<-wie oben kommentiert - unnötig (setvar "cmdecho" 1)<-wie oben kommentiert - unnötig ) ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C ; ;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus / ; ((wcmatch KD-DWGNAME "*-B.dwg") ; ; ; ;Index-C erstellen ; (DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK) .. Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch. Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. .. ) (DEFUN GET-ATT (tag blk / val enx) .. Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch. Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. .. ) (DEFUN PUT-ATT (blk tag val / end enx) .. Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch. Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. .. ) (DEFUN C:COPY-ATT () .. Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch. Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben, HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich. .. ) (C:COPY-ATT) ;_________________________________________________________________________________________________________________________ ; usw. )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 15. Jul. 2021 14:21 <-- editieren / zitieren --> Unities abgeben:
>>"danach widerholt sich alles Index-D...E" DAS bezieht sich auf den vorherigen Abschnitt für "Index-C" nehme ich an? Okay, ich nehme deine Aussage ernst, also D-Z ist, bis auf den Indexbuchstaben, als wie für C. Index-B ist wie Index-A aufgebaut. (Bis auf die Indexbuchstaben) Ab Index-C kommt "COPY-ATT" dazu und dann ist Index-D-E-F-usw. wie Index-C aufgebaut. (Bis auf die Indexbuchstaben) Danke für deine Mühe und die super Erklärungen. Ich gestehe, ich habe es 1x zusammengebaut. Nach dem es lief, habe ich es einfach durch kopiert, ohne mir Gedanken zu machen wie ich es zusammenfassen könnte. Ich melde mich wieder wenn ich es überarbeitet habe. das hier ist der Scriptcall: KD-Stempel-Layout-Index-A-Z.scr
Code: RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(Y) $1Z RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(X) $1Y RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(W) $1X RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(V) $1W RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(U) $1V RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(T) $1U RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(S) $1T RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(R) $1S RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(Q) $1R RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(P) $1Q RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(O) $1P RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(N) $1O RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(M) $1N RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(L) $1M RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(K) $1L RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(J) $1K RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(I) $1J RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(H) $1I RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(G) $1H RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(F) $1G RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(E) $1F RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(D) $1E RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(C) $1D RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(B) $1C RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(A) $1B RRENAME Layouts ([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(-) $1A
Ich denke so hattest du es gemeint, oder? ------------------ Gruß Manuel [Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Jul. 2021 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Manuel486
Ja genau so. Vielleicht hatte ich das oben FALSCH interpretiert weil du das Script ~26 Mal aufrufst obwohl 1x ausreicht. Das verwirrte mich in dem Moment wohl, passiert. PS.: DU HAST POST Teil.2
Code:
hier zeige ich nicht den Code sondern beschreibe den Aufbau wie das aussehen könnte - allerdings nicht mit nur Copy&Paste aus deiner Vorlage-Notwendige Dateien laden (rrename zB.) -Wenn nicht als externe Datei vorhanden, aber benötigt: Weitere Funktionen definieren (GET-ATT zB.) -Vorbereitung/Einstellungen machen (CMDECHO oder auch KD-DWGNAME defineren zB.) -Neuen Index ermitteln (als wenn "-", dann "A". Wenn A-Y, dann eins höher) ;--- Wenn neuer Index =A, dann Indexzeile 1 mit "A" ausfüllen Wenn neuer Index =B, dann Indexzeile 2 mit "B" ausfüllen Bei allen anderen Indexzeile 2 in 1 kopieren und Indexzeile2 mit dem neuen Index füllen SRXTEXT und RRENAME Layout ausführen mit neuem Index als Vorgabe SpeichernUnter Optional, Einstellungen zurücksetzen ; ENDE
So wäre es dann recht schlank. Man muss es also möglichst variable gestalten. ; Ermittelt den aktuellen Index vom Dateinamen und legt den zukünftigen Index fest ; (setq Index (strcase(substr KD-DWGNAME (-(strlen KD-DWGNAME)4) 1))) ; aktueller Dateinamen-Index (cond ((= "-" Index) ; wenn aktueller Index "-" -> Index "A" (setq Index "A")) ((< 64 (ascii INDEX) 90) ; wenn aktueller Index "A"-"Y" -> ein Buchstabe höher (setq Index (chr(1+(ascii Index))))) (T (alert (princ(strcat "Irgendwas stimmt da mit dem aktuellen Datei-Index nicht!? (" KD-DWGNAME ")"))) (exit)) ) Die Funktionen zum schreiben/ändern der Daten erwarten INDEX als Argument und da man den neuen Index bereits festgelegt hat -> schwupp, läuft. statisch immer gleicher Ausdruck: (alert (strcat "Neuer Index ist: " Index)) aber je nach gebundenem Variablenwert, => "Neuer Index ist: C" => "Neuer Index ist: D" usw. Für derartige Späße empfehle ich ja aber besser noch mal bei Null zu starten, mit dem Kochbuch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manuel486 Mitglied Technischer Zeichner Elektro
Beiträge: 212 Registriert: 31.01.2020
|
erstellt am: 22. Jul. 2021 13:55 <-- editieren / zitieren --> Unities abgeben:
So, es ist vollbracht. Habe noch ein paar Sachen eingebaut. Wie z.B.: - Ermittlung des korrekten Dateinamens - Zeichner ermitteln - Zeichner Kürzel erstellen - Planer ermitteln - Planer Kürzel erstellen - Aktuelles Datum ermitteln Das wird dann alles automatisch in die Indexzeilen eingetragen. Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;KD-Stempel Index erhöhen.lsp ;;; ;;;Ver. 1.2 ;;; ;;;Manuel Faust, 07/2021 ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;------------------------------------------------------------------------------------------------------------------------------ ;CMDECHO (Systemvariable), Deaktiviert die Protokollierung im Textfenster / ; (setvar "cmdecho" 0) ;------------------------------------------------------------------------------------------------------------------------------ ;Liest den DWG-Namen mit Dateiendung aus / ; (setq KD-DWGNAME (getvar 'dwgname)) ;------------------------------------------------------------------------------------------------------------------------------ ;Ermittelt die ersten drei Stellen im Dateinamen / ; (setq DATEINAME-1-3 (substr KD-DWGNAME 1 3)) ;------------------------------------------------------------------------------------------------------------------------------ ;Ermittelt ob die KD-Plannummerierung vorliegt / ; (if (not (wcmatch DATEINAME-1-3 "TGE,TGT,TGB,TGL,FRD")) ; erste drei Stellen NICHT = "xxx" -> Fehlermeldung (progn (alert (princ(strcat "Keine KD-Plancodierung! (" KD-DWGNAME ")"))) (exit)) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Ermittelt den aktuellen Index des Dateinamens und legt den zukünftigen Index fest / ; (setq INDEX (strcase(substr KD-DWGNAME (-(strlen KD-DWGNAME)4) 1))) ; aktueller Dateinamen-Index (cond ((= "-" INDEX) ; wenn aktueller Index "-" -> Index "A" (setq INDEX "A")) ((< 64 (ascii INDEX) 90) ; wenn aktueller Index "A"-"Y" -> ein Buchstabe höher (setq INDEX (chr(1+(ascii Index))))) (T (alert (princ(strcat "Fehler in der Plancodierung! (" KD-DWGNAME ")"))) (exit)) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Setzt das aktuelle Datum im Format "DD.MO.YY" "20.07.21" / ; (setq DATUM-HEUTE (menucmd "M=$(edtime, $(getvar,date),DD.MO.YY)")) ;------------------------------------------------------------------------------------------------------------------------------ ;Ermittelt den aktuellen Benutzer / ; (setq AKT-BENUTZER (getvar "loginname")) ;------------------------------------------------------------------------------------------------------------------------------ ;Legt für den aktuellen Benutzer ein Kürzel fest / ; (cond ((= "faust" AKT-BENUTZER) ; wenn aktueller Benutzer "faust" -> Kürzel " / Fa." (setq BENUTZER-KURZ " / Fa."));;;;;;;;;;;;;;;;;;USW USW (T (alert (princ "Fehler in der Benutzererkennung!")) (exit)) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Ermittelt den Wert der Attributbezeichnung "NAME-GEP" / ; (defun GET-ATT-TAG ( Blkname Tagname / ss blk tagn atts att ) (vl-load-com); if required (setq ss nil rtn "") (setq ss (ssget "_X" (list (cons 0 "INSERT")(cons 66 1)(cons 2 Blkname)))) (if ss (progn (setq blk (vlax-ename->vla-object (ssname ss 0))) (if (safearray-value (setq atts (vlax-variant-value (vla-getattributes blk)))) (progn (setq atts (vlax-safearray->list (vlax-variant-value (vla-getattributes blk)))) (foreach att atts (setq tagn (strcase (vla-get-tagstring att))) (if (= tagn (strcase Tagname)) (setq rtn (vla-get-textstring att)) ); if ); foreach ); progn ); if ); progn ); if rtn ); end function (setq GEPLANT-VON (get-att-tag "*KD-Stempel*" "NAME-GEP")) ;------------------------------------------------------------------------------------------------------------------------------ ;Legt für die Attributbezeichnung "NAME-GEP" ein Kürzel fest / ; (cond ((= "Dörflinger" GEPLANT-VON) ; wenn geplant von "Dörflinger" -> Kürzel "Dö." (setq GEPLANT-KURZ "Dö.")) ;;;;;;;;;;;;;;;;;;USW USW (T (alert (princ "Name des Planers nicht vorhanden!")) (exit)) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Lädt die LISP: SRRename.VLX / rRename - regex rename utility for AutoCAD tables / ; (LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX") ;------------------------------------------------------------------------------------------------------------------------------ ;Lädt die LISP: SRXTEXT.VLX / SRXTEXT - search/replace with regular expressions / ; (LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX") ;------------------------------------------------------------------------------------------------------------------------------ ;Stellt das Zoomen von SRXTEXT.VLX aus / ; (setq _SRXTEXTNOZOOM 1) ;------------------------------------------------------------------------------------------------------------------------------ ;Die Funktion "UPDATE-Title-Block" wird geladen / ; (defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN) (if (= (type INSERTNAME) 'STR) (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME)))) ) (if(or AUSWAHL (setq AUSWAHL (ssget "_x" '((0 . "INSERT")))) ) (progn (setq INDEX -1) (repeat (sslength AUSWAHL) (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX))))) (if (assoc 66 OBJEKTDATEN) (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND") (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN))))) (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB") (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME) ) (progn (entmod(subst(cons 1 ATTRIBWERT) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) ) ) ) ) ) ) ) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Kopiert einen Attributwert von einem Attribut zu einem anderen Attribut derselben Blockreferenz, ;durchläuft alle TopLevel Referenzen des Blockes / nicht dyn.Block geeignet / ; (DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK) (setq sset (ssget "x" (list (cons 2 BLOCKNAME)))) (if (= sset nil)(setq l 0)) (setq l (sslength sset)) (setq i 0) (repeat l (setq iBLK (ssname sset i)) (SETQ VALUE (GET-ATT FROMatt iBLK)) (PUT-ATT iBLK TOatt VALUE) (setq i (1+ i)) ) ) ;Liest den Attributwert eines Attributes einer Blockreferenz und gibt den Wert zurück / ; (DEFUN GET-ATT (tag blk / val enx) (WHILE (AND (NULL val) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))) ) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (SETQ val (CDR (ASSOC 1 enx))) ) ) ) ;Ändert den Wert eines Attributes einer Blockreferenz / ; (DEFUN PUT-ATT (blk tag val / end enx) (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))) (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx)))) (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx)) (PROGN (ENTUPD blk) (SETQ end val)) ) ) ) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Funktionen um den Index im KD-Stempel zu erhöhen ; ;Indexzeile verschieben wenn Index C oder höher gesetzt werden soll ; (if (wcmatch Index "[C-Z]") (progn (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1") (COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1") (COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1") (COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1") ) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Index A bis Z wird erstellt ; (cond ((= Index "A") (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A") (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" DATUM-HEUTE) (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" (strcat GEPLANT-KURZ BENUTZER-KURZ)) (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen") ) (T ;(< 65 (ascii INDEX) 90) ; B bis Y (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" INDEX) (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2" INDEX) (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2" DATUM-HEUTE) (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2" (strcat GEPLANT-KURZ BENUTZER-KURZ)) (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2" "Anpassungen und Ergänzungen") ) ) ;------------------------------------------------------------------------------------------------------------------------------ ;Dateiname im Stempel wird auf aktuellen Index gesetzt / ; (SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" (strcat "$1" INDEX) "All") ;------------------------------------------------------------------------------------------------------------------------------ ;Layoutnamen werden auf aktuellen Index gesetzt / ; (command "_.SCRIPT" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") ;------------------------------------------------------------------------------------------------------------------------------ ;Datei wird auf aktuellen Index gespeichert / ; (command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) Index)) ;------------------------------------------------------------------------------------------------------------------------------ ;Alles Regenerieren / ; (command "_.regenall") ;------------------------------------------------------------------------------------------------------------------------------ ;CMDECHO (Systemvariable), Aktiviert die Protokollierung im Textfenster / ; (setvar "cmdecho" 1)
Vielen dank nochmal, an alle fleißigen Helfer ------------------ Gruß Manuel [Diese Nachricht wurde von Manuel486 am 22. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|