Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  no function definition: layerstate-getnames

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:  no function definition: layerstate-getnames (1347 mal gelesen)
cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 18. Nov. 2019 10:25    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


OPSAVE.zip

 
Hallo Lispler,
ich möchte per Lisp im single document interface (SDI=1) nacheinander mehrere DWG's öffnen und
in jeder DWG (setq lstate (layerstate-getnames 'T)) ausführen.
Wenn ich das mit der im Anhang hochgeladenen "!OPSAVE1.lsp" ausführe bekomme ich die Fehlermeldung
no function definition: layerstate-getnames
und die Lisp wird abgebrochen.
Wenn ich nach dem Abbruch den Befehl in die Befehlszeile kopiere funktioniert er.
Kann mir jemand sagen woran das liegt?

Im Anhang befindet sich ein Beispeil mit drei DWG's, die nacheinander abgearbeitet werden sollen, sowie die Lisp und die OPSAVE_DatList.txt, in der die zu bearbeitenden Dateien stehen.
Vorgehensweise: Leere Zeichnung öffnen, Zeichnung speichern und dann die Lisp starten.

------------------
Danke Stefan

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 18. Nov. 2019 10: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 Nur für cadking 10 Unities + Antwort hilfreich

Wenn du sichergestellt hast, das die Zeichnungen nacheinander geöffnet werden und eine Aktion erfolgen soll, musst du natürlich auch sicherstellen, das die auszuführende Aktion, in der Zeichnung zur Verfügung steht.
Wird dein Lisp geladen?
Sieh dazu auch die setvar lispinit an
Is es eine Unterfunktion, die ausgeführt werden soll?
Hast du die Funktion mal als C: definiert?

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 18. Nov. 2019 12: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

Hallo CADwiesel,
hast du dir mal die hochgeladene Lisp angesehen?
Wenn ich z.B. die Zeichnung1.dwg ohne die Lisp (also manuell) im SDI=1 öffne und (setq lstate (layerstate-getnames 'T)) in die Befehlszeile eingebe funktioniert es sofort.
lispinit steht auf 1
In der Lisp ist es keine Unterfunktion.
Kopiere doch einfach mal alle Dateien aus der ZIP in einen Test-Ordner, öffne eine neue Zeichnung, speichere Diese in den Test-Ordner und zieh die List per Drag&Drop in die Zeichnung.
Wenn die Fehlermeldung "no function definition: layerstate-getnames" erscheint gibt sofort danach (setq lstate (layerstate-getnames 'T)) ein.
Bei mir gibt AutoCAD dann keine Fehlermeldung aus, sondern:
Befehl: (setq lstate (layerstate-getnames 'T))
("xx" "yy" "zz")

Da lade ich doch vorher auch nichts, folglich steht doch die auszuführende Aktion, in der Zeichnung zur Verfügung?

------------------
Danke Stefan

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 18. Nov. 2019 15:41    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 cadking 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadking:
Hallo CADwiesel,
hast...Wenn die Fehlermeldung "no function definition: layerstate-getnames" erscheint gibt sofort danach (setq lstate (layerstate-getnames 'T)) ein....


Genau zwischen der Fehlermeldung und dem händischen Eingeben scheint etwas zu passieren (nachladen von Funktionen?), dass eben vorher nicht funktioniert hat.

ich weiss nicht wie flexibel du sein willst und wie oft und wie deine DWG_DATLIST.TXT erstellt wird, aber ist hier ein Script eine Option für dich? So a la ..

dwg_datlist.scr

Code:
_open zeichnung1.dwg (load "opsave.lsp") (opsave)
_open zeichnung2.dwg (load "opsave.lsp") (opsave)
...

BTW: Ein Rufzeichen im Dateinamen macht mich immer leicht paranoid. Aber wenn's klappt ..

------------------
Für jedes Problem gibt es eine einfache Lösung.
Die ist aber meistens falsch. ;-)

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

cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 18. Nov. 2019 16:16    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

Hallo Peter2,
die Idee hatte ich auch schon, aber...
zunächst mal, die DWG_DATLIST.TXT erstelle ich nur einmal von hand ausserhalb von Autocad.
Nun zum aber:
wenn ich eine Zeichnung geöffnt habe und dort das Script starte wird die erste Zeichnung geöffnet und die Lisp abgearbeitet (in der Lisp steht am Ende speichern und schliessen). Dann geschieht nichts mehr, sprich die nächste Zeile im Script wird nicht mehr abgearbeitet.

Script:
_open "Zeichnung1.dwg" (load "get-LAYERSTATE.lsp")
_open "Zeichnung2.dwg" (load "get-LAYERSTATE.lsp")
_open "Zeichnung3.dwg" (load "get-LAYERSTATE.lsp")

Lisp:
(defun get-LAYERSTATE ( / lstate)
(setq lstate (layerstate-getnames 'T))
(print "Layerstatus in Zeichnung: ")(princ lstate)(terpri)
(command "_qsave")
(command "_close")
)
;---------------
(get-LAYERSTATE)

------------------
Danke Stefan

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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 18. Nov. 2019 16:30    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 cadking 10 Unities + Antwort hilfreich

Ist es so geplant, dass das Lisp nur etwas schreibt und dann speichert?
Und das (princ lstate) würde ich mit einem "if" prüfen, damit es bei Zeichnungen ohne Layerstate nicht auf die Nase fällt ..

Und auf was steht jetzt "sdi"?

------------------
Wichtig: Vor dem Schütteln gut öffnen!

[Diese Nachricht wurde von Peter2 am 18. Nov. 2019 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

Alles

erstellt am: 18. Nov. 2019 16:35    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 cadking 10 Unities + Antwort hilfreich

Wenn du im SDI bist dann schließt nicht der User die Datei, ausschließlich AutoCAD mit Beenden der Anwendung oder dem öffnen eines anderen Dokuments.
SDI bedeutet SingleDocumentInterface und hat immer genau 1 Dokument offen.

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

Alles

erstellt am: 18. Nov. 2019 16:41    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 cadking 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Peter2:
Und das (princ lstate) würde ich mit einem "if" prüfen

Ich denke das ist in dem geposteten Beispiel nicht nötig, da kein Layerstatus gar
der bessere Fall ist und wenn ein oder mehrere Layerstatus vorhanden wäre, es immer crashed.
Es gibt in dem Thread/Dateien mehrere "unmögliche" Dinge. Vielleicht sollte man einfach noch
einmal in Rihe anfangen und das ganze Schritt  für Schritt überdenken.

Es sind nur Details, aber es gibt nunmal kein "es funktioniert nur ein bischen nicht"

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

cadking
Mitglied
CAD-Zeichendiensleistung


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

Beiträge: 238
Registriert: 26.10.2004

Intel Quadcore i7,W7-64bit, Quadro FX 3800
MEP/ACA2018; MEP/ACA2018; MEP/ACA2021; MEP/ACA2021

erstellt am: 18. Nov. 2019 19:29    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

Es ist doch nur ein Beispiel mit dem ich dahinterkommen will warum im SDI=1 beim Öffnen von Dateien per lisp die Zeile
(setq lstate (layerstate-getnames 'T))
no function definition: layerstate-getnames zurück gibt und die Lisp abgebrochen wird
aber bei manuell geöffneten Dateien auch im SDI=1 bei der Eingabe von
(setq lstate (layerstate-getnames 'T)) kein Abbruch erfolgt.

Die Zeile (setq lstate (layerstate-getnames 'T)) ist Bestandteil einer Lisp, die nacheinander 6000 Dateien öffnen soll (aufgelistet in einer Textdatei) und diverse Änderungen vornimmt.
Mir fehlt nur noch eine Möglichkeit die Layerstatusse zu bereinigen (löschen) und das geht nur, wenn ich weiß wie die heißen.
(setq lstate (layerstate-getnames 'T)) erzeugt eine Liste mit alle Layerstatussen, die ich dann bereinigen könnte.

------------------
Danke Stefan

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

Alles

erstellt am: 19. Nov. 2019 10: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 Nur für cadking 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadking:
Es ist doch nur ein Beispiel


Nein, es ist ein Script/Code den du hier (als grundsätzlich lauffähig) präsentierst,
daher wiederhole ich meine Aussage. Höre mit deinen "Beispielen" auf und erstelle Script/Code richtig,
dann können wir auch "richtig" darüber reden was schief läuft (was es dann aber nicht mehr macht).

Zitat:
Original erstellt von cadffm:
Es gibt in dem Thread/Dateien mehrere "unmögliche" Dinge. Vielleicht sollte man einfach noch
einmal in R[i]u
he anfangen und das ganze Schritt  für Schritt überdenken.

Es sind nur Details, aber es gibt nunmal kein "es funktioniert nur ein bischen nicht" [/i]



Dann fliegen auch Dinge wie FILEDIA oder OBJECTISOLATIONMODE raus da diese keine Funktion haben,
zumind. keine sinnvoll-logische, das verschafft ebenfalls Überblick.

Ein Beispielablauf, orientiert an deiner Lispdatei mit dem angstfreien Namen:


Stelle sicher das OPSAVE und get-Layerstate (ohne open/close Anweisungen) geladen ist.


;=====
Wenn möglich, SDI=1
dann


Setze Lispinit 0

Foreach <aus Datliste gelesen und gefundene DWG,>    {das WHILE ""hier ist das ende"" ist unnötig solange diese Zeile nicht in der DatList.txt steht}
Datei öffnen
   MachWasDuMöchtest (Hauptsache)
   QSAVE
Foreach_ende
Datei neu {oder erst SDI=0 und _Close}
SDI=0

;====


Wenn du die Antwort als ungerechtfertigt ansiehst (also ganz am Ende wenn es dann mal läuft), dann
Antworte ich darauf bereits jetzt: Die richtige Antwort kam bereits mit der ersten Antwort von CADwiesel:
Die Script/Code-Struktur passt nicht zur Lispinit=1 Einstellung.

 

Einmal auf weissem Blatt Papier anfangen und den ganzen Ablauf 1:1 im Kopf durchgehen und notieren.

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