Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  DCL-Boxen Fragen

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
  
PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  DCL-Boxen Fragen (852 / mal gelesen)
ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 71
Registriert: 07.02.2018

ACAD 2023
Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000

erstellt am: 12. Sep. 2023 11:05    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


Schraubenbox.PNG

 
Hallo zusammen,

dank der umfangreichen Hilfen hier im Forum habe ich schon einige Hilfsroutinen für die tägliche ACAD-Arbeit geschrieben.

Allerdings hänge ich jetzt an zwei grundlegenden Problemen mit den DCL-Boxen...

1. Wie kann ich eine List_box mit den Daten aus einer Excel- oder Textdatei füttern? Im Anhang ein Beispiel für eine Schraubenauswahl => hier würde ich gern als erstes die Box für die Norm füllen. Die zur Verfügung stehenden Durchmesser sollen nach Anklicken einer Norm automatisch in die Popup-List geladen werden, gleiches gilt für die verfügbaren Längen (in Abhängigkeit des gewählten Durchmessers).
Die entsprechenden Werte würde ich in eine Excel packen...

Ist das so überhaupt machbar?

2. Kann man der dcl beibringen, die in der ACAD-Arbeitssitzung ausgewählten Werte als Vorwahl zu behalten, d.h. dass die letzte Konfiguration beim Aufrufen der dcl wieder angezeigt wird?

Für eure Anregungen wie immer schonmal danke im Voraus.

Grüße René

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

Archäologie Bubi
Mitglied
Archäologische Funddokumentation


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

Beiträge: 64
Registriert: 09.03.2021

AutoCAD Map 3D 2013
AutoCAD Map 3D 2023
AutoCAD Map 3D 2024
Faro AS-Built / TachyCAD
BricsCAD V18
Elcovision ElTheo
Agisoft Photoscan
Agisoft Metashape Professional 1.7
Agisoft Metashape Professional 2.0

erstellt am: 12. Sep. 2023 12:26    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 ReneReichel 10 Unities + Antwort hilfreich

Hallo Rene

1.1 Die list_box kannst du über die Dialogsteuerung in LISP mit 'add_list füllen. Am besten gleich eine kleine Funktion für basteln, da du dieselbe später für die popup-list immer wieder brauchst.

z.B. so:

Code:
;;;  Befehl:    L-Layer |-> UpdateBox
;;;  Zweck:      Aktualisiert die Listen im Dialogfenster
;;;  Funktionen: Keine Unterfunktionen
;;;  Autor:      Fabian Bubendorf / Archäologische Bodenforschung Basel-Stadt
;;;  Datum:      2022/August
;;;  Argumente:  Key  --> Key der Dialogeinrichtung
;;;              Lst  --> Liste die geladen werden soll
;;;  Code:
  (defun UpdateBox ( Key Lst / )
    (start_list Key)
    (mapcar 'add_list Lst)
    (end_list)
  );end defun

Als Lst nimmst du dann deine Daten als Liste aus Excel.

1.2 Die popup_list's ladest du ebenfalls mit der UpdateBox Funktion, steuerst diese aber über ein action_tile der List_box.
Also ausgewählter Wert auslesen, passende Liste laden.

2. DCL kann man nix beibringen, man kann es nur steuern. Aber du könntest die Daten mit LISP irgendwo zwischenspeichern und dann wieder laden.

------------------

Bubi spiele, Bubi glücklich!

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 71
Registriert: 07.02.2018

ACAD 2023
Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000

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


Exceltest.txt


Schraubenliste.xlsx.txt

 
Zitat:
Original erstellt von Archäologie Bubi:
Hallo Rene

1.1 Die list_box kannst du über die Dialogsteuerung in LISP mit 'add_list füllen. Am besten gleich eine kleine Funktion für basteln, da du dieselbe später für die popup-list immer wieder brauchst.

z.B. so:

Code:
;;;  Befehl:     L-Layer |-> UpdateBox
;;;  Zweck:      Aktualisiert die Listen im Dialogfenster
;;;  Funktionen: Keine Unterfunktionen
;;;  Autor:      Fabian Bubendorf / Archäologische Bodenforschung Basel-Stadt
;;;  Datum:      2022/August
;;;  Argumente:  Key  --> Key der Dialogeinrichtung
;;;              Lst  --> Liste die geladen werden soll
;;;  Code:
  (defun UpdateBox ( Key Lst / )
    (start_list Key)
    (mapcar 'add_list Lst)
    (end_list)
  );end defun

Als Lst nimmst du dann deine Daten als Liste aus Excel.


Hallo Bubi,

danke für Deine Rückmeldung. Leider stellt sich das nicht so einfach dar. Ich bekomme zwar die Werte aus der Excel in eine Liste (ExcData aus dem Beispiel im Anhang), beim Versuch die Klammern mit subst wegzubekommen, krieg ich die Fehlermeldung 'Fehlerhaftes Element in Argumentliste: "ISO 4014"'

Das ist mir völlig unverständlich, warum ist ein String ein fehlerhaftes Argument in einer Liste?

Zitat:
Original erstellt von Archäologie Bubi:

2. DCL kann man nix beibringen, man kann es nur steuern. Aber du könntest die Daten mit LISP irgendwo zwischenspeichern und dann wieder laden.

Wie macht man das?

Grüße René

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

Archäologie Bubi
Mitglied
Archäologische Funddokumentation


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

Beiträge: 64
Registriert: 09.03.2021

AutoCAD Map 3D 2013
AutoCAD Map 3D 2023
AutoCAD Map 3D 2024
Faro AS-Built / TachyCAD
BricsCAD V18
Elcovision ElTheo
Agisoft Photoscan
Agisoft Metashape Professional 1.7
Agisoft Metashape Professional 2.0

erstellt am: 13. Sep. 2023 08:26    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 ReneReichel 10 Unities + Antwort hilfreich

Guten Morgen Rene

Die Daten aus der Excel bekommst du ja schonmal. Wobei dein aktueller Aufbau noch nicht sehr Flexibel scheint. In diesem Fall könnte man die Werte auch gleich in LISP speichern.

Zu deiner Fehlermeldung:
Der Fehler kommt eher nicht von subst, obwohl dein Versuch hier ebenfalls ziemlich daneben liegt.
Aus der AutoLISP Documentation.help: subst = Searches a list for an old item and returns a copy of the list with a new item substituted in place of every occurrence of the old item

Du besitzt beim Einsatz von subst eine Liste mit mehreren Unterlisten, die jeweils einen String besitzen. Keines dieser Elemente in der obersten Liste entspricht dem Item ") (", welches ein String ist!
Subst gibt dir deshalb einfach die Liste unverändert zurück.

Dein Fehler entsteht, weil du bei (setq LstNorm dem subst-Aufruf keine Liste übergibst, sondern deine Variable als Funktion = fehlerhaftes Argument.

Ersetze am besten mal:

Code:
(setq ExcData (subst ") (" "" (mapcar (function (lambda (x) (mapcar 'vl-princ-to-string (mapcar 'vlax-variant-value x)))) ExcData)))

durch
Code:
(setq ExcData (mapcar 'vlax-variant-value (mapcar 'car ExcData)))

und entferne (setq LstNorm


Zum speichern der Auswahl kommt es etwas darauf an, wie lange und für was du es speichern willst.

Zur Zeit wird auch gerade ein solches Thema hier im Forum diskutiert -> https://ww3.cad.de/foren/ubb/Forum145/HTML/004936.shtml
Du könntest es auch wieder in die Excel schreiben oder einfach eine Globale Variable für diese Zeichnung in der aktuellen Sitzung setzten etc.

------------------

Bubi spiele, Bubi glücklich!

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

ReneReichel
Mitglied
Technischer Projektleiter


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

Beiträge: 71
Registriert: 07.02.2018

ACAD 2023
Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000

erstellt am: 15. Sep. 2023 10:32    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

Zitat:
Original erstellt von Archäologie Bubi:
Guten Morgen Rene

Die Daten aus der Excel bekommst du ja schonmal. Wobei dein aktueller Aufbau noch nicht sehr Flexibel scheint. In diesem Fall könnte man die Werte auch gleich in LISP speichern.


Hallo Bubi,

das war nur die Testliste. Für die Endversion habe ich diverse Schraubennormen, Durchmesser und Längen in der Liste gespeichert, das alles im LISP zu setzen, wäre einfach zu viel. Zudem müsste ich dann bei Ergänzungen immer das Script anpassen, anstatt nur die Excel zu ergänzen.

Zitat:
Original erstellt von Archäologie Bubi:

[...]

Dein Fehler entsteht, weil du bei (setq LstNorm dem subst-Aufruf keine Liste übergibst, sondern deine Variable als Funktion = fehlerhaftes Argument.

Ersetze am besten mal:

Code:
(setq ExcData (subst ") (" "" (mapcar (function (lambda (x) (mapcar 'vl-princ-to-string (mapcar 'vlax-variant-value x)))) ExcData)))

durch
Code:
(setq ExcData (mapcar 'vlax-variant-value (mapcar 'car ExcData)))

und entferne (setq LstNorm


Klar, Denkfehler von mir. Danke für die fertige Lösung, das läuft...    

Zitat:
Original erstellt von Archäologie Bubi:

Zum speichern der Auswahl kommt es etwas darauf an, wie lange und für was du es speichern willst.

Zur Zeit wird auch gerade ein solches Thema hier im Forum diskutiert -> https://ww3.cad.de/foren/ubb/Forum145/HTML/004936.shtml
Du könntest es auch wieder in die Excel schreiben oder einfach eine Globale Variable für diese Zeichnung in der aktuellen Sitzung setzten etc.


Der Link funzt nicht, brauche ich aber auch nicht. Dass ich nicht daran gedacht habe, die zuletzt abgerufenen Werte einfach zu speichern, ärgert mich jetzt mächtig (da ich auch in Excel-VBA unterwegs bin...)    

Das funktioniert natürlich einwandfrei...

Davon weitergehend taucht gleich die nächste Frage auf. Kann ich per LISP beim Erstellen eines Blocks diesem Attribute mit auf den Weg geben? Hintergrund ist, dass wir im Fassadenbau unterwegs sind und bislang die Gläser der Fassaden "händisch" unterscheiden und nummerieren. Ich würde das gerne automatisieren. Die Scheiben als Block auf Grundlage einer Auswahl von Glastyp und Abmessungen in der Zeichnung zu erstellen, ist ja kein Problem. Nun soll der Block gleich noch ein Attribut erhalten, welches Glastyp (aus der Eingabemaske) und Glasnummer enthält (und als Beschriftung der Scheibe in der Ansicht dienen soll). Die Glasnummer will ich anhand der Scheibenparameter auszählen (das krieg ich hin, denke ich), im Moment scheitere ich aber daran, dem Block das Attribut mitzugeben...

Danke Dir für Deine Hilfe.

Grüße René

[Diese Nachricht wurde von ReneReichel am 15. Sep. 2023 editiert.]

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

archtools
Mitglied



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

Beiträge: 970
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 15. Sep. 2023 12:00    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 ReneReichel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ReneReichel:

Kann ich per LISP beim Erstellen eines Blocks diesem Attribute mit auf den Weg geben?

Ja, natürlich. Dazu braucht die Blockdefinition noch nicht mal ATTDEF Entities zu enthalten. Einfach bei der Erzeugung des INSERTs per ENTMAKE den DXF Flag für "Attribute folgen" setzen (DXF Gruppencode 66: Variables Flag "Nachfolgende Attribute" (optional; Vorgabewert = 0). Wenn dieses Flag auf 1 gesetzt ist, folgt eine Reihe von Attributen auf das eingefügte Objekt, die mit dem Element seqend abschließt.), und dann die ATTRIB Entities erzeugen, und diese mit dem SEQEND Entity abschließen.

Vorschlag: Alternativ kannst Du statt ATTRIBs natürlich auch beliebige Daten in XDATA oder XDICTIONARY speichern, was Dir etwas mehr Flexibilität und Kontrolle ermöglicht. Die Anzeige erfolgt dann beispielsweise als MTEXT.

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)2024 CAD.de | Impressum | Datenschutz