accoreconsole.exe : Script ausführen, das ein selbstgeschriebenes .lsp startet

accoreconsole.exe : Script ausführen, das ein selbstgeschriebenes .lsp startet

carstenhoppe8585
Enthusiast Enthusiast
1.938Aufrufe
15Antworten
Nachricht 1 von 16

accoreconsole.exe : Script ausführen, das ein selbstgeschriebenes .lsp startet

carstenhoppe8585
Enthusiast
Enthusiast

 

 

Hallo

 

ich habe ein .lsp geschrieben, welches in einem .scr geladen wird.

Das .scr möchte ich zusammen mit einem DWG mittels Consolenbefehl abarbeiten lassen.

 

"C:\Program Files\Autodesk\AutoCAD 2017\accoreconsole.exe" /I "C:\temp\AutoCAD_LISP\DR_m_Ass.dwg /s "C:\Temp\AutoCAD_LISP\xref2.lsp"

 

Das .lsp führt einige Befehle aus, und  macht eine Ausgabe in eine Text-Datei.

(Es ist kein Zusatzprogramm involviert , es ist NUR AutoCAD 2017 installiert. Sollte also von jedem so nachvollziehbar sein, einzig die 3 DWG's (XREF Struktur) müssen selbst erstellt warden)

(ich habe eine DR_m_ass.dwg, die 2 XREFs enthält : DR1_mm.dwg  + DR2_cm.dwg) 

 

Wenn ich AutoCAD normal öffne, eine Zeichnung (die auch XREFS enthält) öffne, und dann mittels

SCRIPT -> "C:\Temp\AutoCAD_LISP\xref2.lsp"

das Script starte, wird die Text-Datei angelegt und befüllt.

 

 

 

 

Wenn ich den Consolenbefehl von oben benutze, wird nichts ausgegeben.

Im Consolenfenster selbst sehe ich nur das hier :

  

 

 

console2.png

 

Script:

(load "C:\\Temp\\AutoCAD_LISP\\xref2.lsp")
(c:XREF_LIST)

 

xfre2.lsp

(defun C:XREF_LIST( / Block)
  (vl-load-com)  
  (setq outputdir "C:\\Temp\\")
  (setq Filename (strcat outputdir "XREF_" (getvar "dwgname") ".txt" ))
  (setq file (open Filename "w"))
  (setq amount_xref 0)
  (vlax-for BLOCK (vla-get-blocks (vla-get-activedocument(vlax-get-acad-object)))
    (if (= (vla-get-isxref BLOCK):vlax-true)
      (progn 
	(setq amount_xref (+ amount_xref 1)) 
	(setq XREF_NAME (vla-get-name Block))
	(setq XREF_amount (sslength (ssget "_X" (list ( cons  2  XREF_NAME )))))
        (princ (strcat "\nXREF Name : " XREF_NAME  "  - Anzahl : " (itoa XREF_amount)) file)
        (setq i 0)
        (repeat XREF_Amount
	  (setq XYZ_Wert (cdr (assoc 10 (entget (ssname (ssget "_X" (list ( cons  2  XREF_NAME ))) i)))))
	  (setq Entity_Name (cdr (assoc -1 (entget (ssname (ssget "_X" (list ( cons  2  XREF_NAME ))) i)))))
	  (setq Objekt (vlax-ename->vla-object Entity_name))
	  (setq get_obj_rotation (vlax-get-property Objekt 'Rotation))
	  (setq XScale_eff (vlax-get-property Objekt 'XEffectiveScaleFactor)) 
	  (setq YScale_eff (vlax-get-property Objekt 'YEffectiveScaleFactor))
	  (setq ZScale_eff (vlax-get-property Objekt 'ZEffectiveScaleFactor))
	  (princ (strcat "\nXREF Name : " XREF_NAME " Entityname : " ) file)
	  (princ Entity_Name file)
	  (princ "\n                  Coordinates            : " file)
	  (princ XYZ_Wert file)
	  (princ "\n                  EffectiveXScale-factor : " file)
	  (princ XScale_eff file)
	  (princ "\n                  EffectiveYScale-factor : " file)
	  (princ YScale_eff file)
	  (princ "\n                  EffectiveZScale-factor : " file)
	  (princ ZScale_eff file)
	  (princ "\n                  Rotation um Z          : " file)
	  (princ get_obj_rotation file)
	  (princ)
	  (setq i (+ i 1)) 
	 )
       )
      )
     )
  (if (= amount_xref 0)
    (princ "no XREF" file)
   )
  (close file)
  (princ) 
  )

 

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (1)
1.939Aufrufe
15Antworten
Antworten (15)
Nachricht 2 von 16

cadffm
Consultant
Consultant

Nehme mal diesen Code und schau was dir in die Datei geschrieben wird

 

(defun C:XREF_LIST( / Block)
  (setq outputdir "C:\\Temp\\")
  (setq Filename (strcat outputdir "XREF_" (getvar "dwgname") ".txt" ))
  (setq file (open Filename "w"))
  (vl-load-com)
  (princ (if (vlax-get-acad-object) "Los gehts" "Autsch!!!!!!!!!!!!!!!!!!!!!!!!!!!!") file)
  (princ "\n" file)
  (close file)
)

 

In der ACC hast du keine ActiveX Schnittstelle zur Verfügung, da müßt du den Code wohl umstricken.

 

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 3 von 16

carstenhoppe8585
Enthusiast
Enthusiast

Auch mit deinem Code wird keine Datei erstellt. Gleiches Verhalten.

 

Allerdings noch eine Frage dazu: Du hast vlax-.... verwendet.

Ist das nicht auch ActiveX?

 

Ich hab den Code noch weiter vereinfacht, dass wirklich nur princ Befehle enthalten sind, aber trotzdem keine Besserung.

 

Klappt der Code denn bei Dir?

 

Gruß

Carsten

0 „Gefällt mir“-Angaben
Nachricht 4 von 16

cadffm
Consultant
Consultant

Also jetzt wird es ja schon fast langweilig mit den Probleme.

 

Schließe alle ACAD/ACC Instanzen.

 

1. Im Link findest du gezippt eine *.dwg *.lsp *.scr und eine *.bat [ LINK ]

    Bitte in dem Verzeichnis 'C:\Temp\JT_Create\Components\' entpacken und die *.bat doppelklicken

    (nach dem du dich von dem gefahrlosen Inhalt der Dateien überzeugt hast)

 

    Nun sollte die Datei 'C:\Temp\JT_Create\Components\XREF_cadffm_test1.dwg.txt' erstellt werden,

    ist dies nicht der Fall, dann fällt mir spontan auch nichts weiter ein.

 

 

 

2. "Du hast vlax-.... verwendet. Ist das nicht auch ActiveX?

 

Ich VERSUCHE in dem Code das ActiveX-Objekt zu erhalten,

im Gegensatz zu "in ACAD" wird die Rückgabe in der ACC jedoch nil sein.

 

Die Funktion ist in der ACC definiert und erreichbar (kein Fehler bezüglich "nicht definierte Funktion"),

jedoch wird kein Objekt zurückgegeben.

 

Mit dem (IF) wollte ich dir dann veranschaulichen => Kein ActiveX-Objekt zu erreichen.

 

 

 

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 5 von 16

carstenhoppe8585
Enthusiast
Enthusiast

I Sebastian

 

danke für deine Erklärungen.

a) mit deinen Dateien tritt erstmal ein Fehler auf, den ich auch schon hatte: Du hast in der.scr Datei die Function direkt hingeschrieben

   cadffm_test1

   Erst wenn ich (c:cadffm_test1) schreibe, tritt keine Fehlermeldung mehr auf.

 

Aber trotzdem wird KEINE .txt Datei geschrieben.

 

sorry, aber verstehen tue ich das nun wirklich nicht.

Wenn das bei Dir geht, muss ich dann erstmal irgendwelche Support Pathes im autoCAD noch setzen, bevor es gehen kann?

 

Gruß

Carsten

   

0 „Gefällt mir“-Angaben
Nachricht 6 von 16

cadffm
Consultant
Consultant

Da ich überall komplette Pfade angegeben habe muß man keine SupportPfade anpassen.

 

Die Geschichte mit cadffm_test1 vs. (c:cadffm_test1) macht komlett überhaupt keinen Sinn

(wenn meine Originaldatei genutzt wurde und sich somit kein Fehler einschleichen konnte)

 

Einzige Nachfrage dazu: WELCHE Fehlermeldung denn, ' cadffm_test1 - unbekannter Befehl'?

 

 

 

 

Ohne das System selbst in der Hand zu haben klinke ich mich an der Stelle aus, sorry.

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 7 von 16

carstenhoppe8585
Enthusiast
Enthusiast

ja, Unknown command

(ich hab ein englishes AutoCAD, kann es daran liegen?)

 

Gruß

Carsten

0 „Gefällt mir“-Angaben
Nachricht 8 von 16

m_latz
Advisor
Advisor

Ich habe mir die Dateien @cadffm mal angeschaut. Ohne das probiert zu haben, würde ich sagen, sollte funktionieren.

 

Aber tut es bei Dir nicht und sollte auch nichts mit der englischen Version von AutoCAD zu tun haben.

 

Aber die CoreConsole holt sich als profil (wenn nicht anders angegeben) das letzte Vorgabeprofil aus AutoCAD. Vielleicht ist das bei Dir ja "defekt".

 

Aber ich gebe @cadffm recht, man müßte mal eine "Remote Control Session" machen, um zu sehen, wo  es hakt.

 

Gruß

 

Markus

0 „Gefällt mir“-Angaben
Nachricht 9 von 16

cadffm
Consultant
Consultant

@carstenhoppe8585

 

Auch wenn es nicht hilft:

 

Da ich von hier aus nicht weiter helfen kann möchte ich das Ganze noch "vereinfachen" und dir auch zeigen wie es bei mir läuft.

Link: http://a360.co/2z3N82z

 

..wieder in C:\Temp\JT_Create\Components\ entpacken und die *.bat ausführen (dieses Mal ist keine lsp dabei)

 

In dem Verzeichnis sollten im Anschluß zwei Textdateien durch das scr erstellt werden und die LOG Datei von der Dateisitzung.

In der TIP ist auch MEINE Logdatei enthalten, so sollte der Verlauf aussehen!

Bitte lade dein LOG hoch damit wir dein Dilemma 1:1 sehen (wir verstehen dich wohl sehr gut, nur dein Acad/ACC nicht 😉 )

 

 

 

Aus Ratlosigkeit würde ich mal Acad mit einem frischen Profil starten, einfach über die cmd-line Acad mit unbekanntem Profilnamen starten:

"C:\Program Files\Autodesk\AutoCAD 2017\acad.exe" /p "TESTprofil"

 

und wieder schließen (TESTprofil ist aktuell und ACC/ACAD sollte damit im Anschluß gestartet werden.

Doppelklick auf den DesktopLink, Sysvar CPROFILE abfragen, "TESTprofil" sollte aktuell sein?

 

Für heute war es das.

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 10 von 16

cadffm
Consultant
Consultant

"In der ZIP ist auch MEINE Logdatei enthalten..." sollte es lauten. So kannst du sehen wie es hier bei mir durchläuft.

 

Bin auf dein LOG gespannt, auch wenn es durch deine Beschreibung bereits absehbar ist wie es aussehen wird.

Versuche das Ganze mit dem neuen Profil noch mal.

Eine ReparaturInstallation kann auch nie schaden.

Alles Tips der Verzweiflung, zugegeben.

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 11 von 16

carstenhoppe8585
Enthusiast
Enthusiast

Hallo Sebastian

 

super, vielen Dank.

Das Logfile wirft tatsächlich einen Fehler aus, bzgl. der vl-Befehle. Das verhindert, dass darin etwas ausgegeben wird.

Außerdem hast du ja jetzt ein Beispiel OHNE .lsp.

Damit bekomme ich zumindest die X1.txt.

 

Es scheint so, als ob ich mit dem Load-Befehl nicht klarkomme.

 

 

Ich fasse zusammen:

Wenn ich den Code direct in die .scr Datei schreibe, kann ich die Funktion einfach mit ihren Namen aufrufen, ohne Klammern, ohne c: davor.

 

Aber vl...-Befehle sind in der Console nicht machbar, die werden nicht gefunden.

 

Im Anhang habe ich mein Logfile und die TXT Dateien

 

 

gruß

Carsten

0 „Gefällt mir“-Angaben
Nachricht 12 von 16

carstenhoppe8585
Enthusiast
Enthusiast

anbei  umgebauter Versuch, um das .lsp zu laden.

Da sieht man, dass der load Befehl auf die Nase fällt.

 

aber ich denke mal, wenn man den code direct ins .scr schreiben kann, ist der FEhler mit dem load nicht so kritisch.

 

Aber dass man in der ACCkeine vl-Befehle benutzen kann, dass ist für mich schon schwerwiegender, da ich ja selbst in diesem Beispielprogramm, was ich weiter oben gepostet habe, einiges mit vl mache.

 

 

Gruß

Carsten

0 „Gefällt mir“-Angaben
Nachricht 13 von 16

cadffm
Consultant
Consultant
Akzeptierte Lösung

Fern des Rechners kann ich nur Vermutungen anstellen: Der Speicherort  der Lispdatei ist im aktuellen Profil nicht als vertrauenswürdiger Speicherort eingetragen,

daher verweigert ACAD(ACC) den Ladevorgang.

 

Systemvariable: TRUSTEDPATHS

 

Daher würde man für Standard-Batchbetrieb ein extra Profil anlegen oder bereits im Script am Wert von TRUSTEDPATHS herumwerkeln.

Dann sollte man sich gut überlegen was und wie man es macht, wenn man mit dem StartParameter /isolate arbeitet, dann könnte man wohl auch

im Script recht stumpfsinnig den benötigten Pfad "immer ergänzen", da die Änderung eh nicht gespeichert wird.

(setvar 'TRUSTEDPATHS (strcat "C:\\Temp\\JT_Create\\Components;" (getvar 'TRUSTEDPATHS)))

 

Aber für jetzt zum einfachen Testen: Acad öffnen und den Pfad C:\Temp\JT_Create\Components ergänzen

(und auch hier daran denken: Wer die ACC nicht mit einem bestimmten Profil startet, der nutzt immer das "zuletzt aktive" Profil)

 

 

"Aber dass man in der ACCkeine vl-Befehle benutzen kann"

VL sollte überhaupt kein Problem sein, soweit die Funktionen in der ACC vorhanden sind, nur VLA(X) kannst du abhaken.

Neben den altbekannten AutoLispfunktionen zur Programmierung und den deutlich mit VL- benannten Funktionen sei in dem Zusammenhang im Besonderen getpropertyvalue setpropertyvalue dumpallproperties zur Problemlösung zu nennen

 

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 14 von 16

maximilian.kroner
Alumni
Alumni

Hallo @carstenhoppe8585,

 


hattest du schon Zeit um @cadffms Vorschlag zu testen?

Es wäre super wenn du kurz Bescheid geben könntest ob du erfolgreich warst, damit wir wissen ob bei dir alles in Ordnung ist oder du noch weitere Unterstützung benötigst.
Wenn alles funktioniert hat, klick bitte auf den Button "als Lösung akzeptieren" und markiere den Beitrag als Lösung damit andere Nutzer auch davon profitieren.

Danke dir

LG



MaximilianKroner

Technical Support Specialist

0 „Gefällt mir“-Angaben
Nachricht 15 von 16

carstenhoppe8585
Enthusiast
Enthusiast

Sorry, war die letzten Tage mit Umzug beschäftigt.

 

Erstmal danke an @cadffm.

Das mit den TrustedPaths hat geholfen. das .lsp wird nun geladen.

 

Sein zusätzlicher Hinweis zum "GetValueProperty" , das hatte ich auch schon im interaktiven Script (im AutoCAD) umgebaut, dort funktionierte es, sodas ich dort ohne vla/x Commands arbeiten konnte.

 

Wenn ich das gleiche SCript, was im AutoCAD läuft, nun im ACC benutze, gibts leider genau bei "GetValueProperty" einen Fehler.

 

error: no function definition: GETPROPERTYVALUE

 

Ich würde jetzt aber den Thread schließen mit der Lösung mit dem TRUSTEDPATHS

 

0 „Gefällt mir“-Angaben
Nachricht 16 von 16

cadffm
Consultant
Consultant

Ich ging davon aus, jedoch stehen getpropertyvalue setpropertyvalue dumpallproperties offensichtlich nicht zur Verfügung.

Hier gehts weiter: https://forums.autodesk.com/t5/forums/replypage/board-id/3544/message-id/7000

 

Sebastian

0 „Gefällt mir“-Angaben