Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Umkehrfunktion in dynamischen Block bearbeiten

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:  Umkehrfunktion in dynamischen Block bearbeiten (1552 mal gelesen)
WuselStift
Mitglied


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

Beiträge: 8
Registriert: 26.09.2007

erstellt am: 26. Feb. 2014 10:38    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 zusammen,

vorab: mit LISP beschäftige ich mich seit 1-2 Tagen, mit wachsender Begeisterung.

Ich muß in ca. 70 (dynamischen) Blöcken die Zuweisung von Attributen zu einer Umkehraktion ändern. Einige Attribute sollen der U-Aktion hinzugefügt und andere entfernt werden.
Ursache (falls die Frage nach dem Warum?) ist die nachträgliche Einfügung von kundenspezifischen Attributen und die dann erforderliche Änderung der Attributreihenfolge (Kundenattribute vor bestehenden Attributen). Im AutoCAD scheinen Parameter wie Sichtbarkeit, Umkehrstatus usw. nicht am Attributname verankert zu sein - nicht besonders gelungen...

Also habe ich dazu folgendes Script entworfen:

(defun c:ATT_KORR_FLIP ()
    ;Systemvariable BACTIONBARMODE auf <0> setzen (Standard <1> um Umkehraktion auswählen zu können
    (command "BACTIONBARMODE" "0")
    ;Sichbarkeitsstatus auf "Normal" setzen
    (command "_-BVSTATE" "SETZEN" "Normal" )
        ;Umkehraktion auswählen
        (sssetfirst(setq AUSWAHL(ssget "_x" (list '(0 . "*flipaction*")(cons 410 (getvar "ctab")))))AUSWAHL)
        ;Umkehraktion aktivieren und Funktion Ändern auswählen
        (command "BACTIONSET" "Ä"
            ;Objekte zum Ändern auswählen
            (sssetfirst(setq STKRBEZ(ssget "_X" (list '(0 . "ATTDEF")'(2 . "STKRBEZ") (cons 410 (getvar "ctab")))))STKRBEZ)
        )
)

Das Script wählt auch das zum Aktionssatz hinzuzufügende Attribut mit Namen "STKRBEZ" aus - fügt es aber nicht der Umkehraktion hinzu.

Ausgabe:
...
>Befehl: BACTIONSET
>Auswahlsatz für Aktionsobjekt angeben [Neu/Ändern] <Neu>: Ä
>
>Zum Aktionssatz hinzuzufügendes Objekt auswählen oder [Entfernen]:
>Befehl: nil

Lasse ich die Zeile "(sssetfirst(setq STKRBEZ(ssget "_X" (list '(0 . "ATTDEF")'(2 . "STKRBEZ") (cons 410 (getvar "ctab")))))STKRBEZ)" im Script weg, bleibt der Ablauf natürlich stehen bei:
>Zum Aktionssatz hinzuzufügendes Objekt auswählen oder [Entfernen]:
Füge ich dann genau diese Zeile per Hand (Copy&Paste) ein und bestätige mit 2x Enter wird das Attribut wie gewünscht der Umkehraktion hinzugefügt. Ich habe also einen Fehler in der Auswahl oder deren Bestätigung...

Grüsse & Danke
Karsten

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: 26. Feb. 2014 11:11    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 WuselStift 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von WuselStift: vorab: mit LISP beschäftige ich mich seit 1-2 Tagen,
        Ok, die Zeilen sind ja mehr Script und haben bis auf das ssget nicht viel mit Lisp zutun,
         denn wer schreibt "1-2 Tage Lisp -> Ziel: dyn.Blöcke ändern" dem sag ich: Laß es sein und lerne erst mal 1 + 1 zu rechnen in Lisp.
         Ein Script mit AutoCADbefehlen und ein wenig ssget sieht schon etwas anders aus und das eigentliche Problem hast du auch schon selbst genannt !
Zitat:
Füge ich dann genau diese Zeile per Hand (Copy&Paste) ein und bestätige mit 2x Enter wird das Attribut wie gewünscht der Umkehraktion hinzugefügt. Ich habe also einen Fehler in der Auswahl oder deren Bestätigung...

Wenn du es per Hand prüfst, wird du sehen das nach der ersten Objektwahl AutoCAD noch weiter zur Objektwahl auffordert,
wenn dies durch eine Leereingabe(Enter) bestätigt wird, läuft der Befehl weiter und somit auch dein Script.
Ich habe dieses ENTER in dem Command ergänzt = "" .

Bei der Objektwahl innerhalb eines Befehls, hast du (sssetfirst .. (ssget)) genutzt, das ist unnötigt und funktioniert ggf. nicht, ich habe es gelöscht.

Code:
(defun c:MachAlles () ; Führt "doit" für alle festgelegten Blockname aus
  (foreach Name '("MyBlock1" "MyBlock2") (doit Name))
)

Code:
(defun doit (BLOCKNAME) ; fügt das Attdef "STKRBEZ" dem Umkehrparameter hinzu
    ;Block in BEDIT öffnen
    (command "-BEDIT" BLOCKNAME)
    ;Systemvariable BACTIONBARMODE auf <0> setzen (Standard <1> um Umkehraktion auswählen zu können
    (command "BACTIONBARMODE" "0")
    ;Sichbarkeitsstatus auf "Normal" setzen
    (command "_-BVSTATE" "SETZEN" "Normal" )
        ;Umkehraktion auswählen
        (sssetfirst(setq AUSWAHL(ssget "_x" (list '(0 . "*flipaction*")(cons 410 (getvar "ctab")))))AUSWAHL)
        ;Umkehraktion aktivieren und Funktion Ändern auswählen
        (command "BACTIONSET" "Ä"
            ;Objekte zum Ändern auswählen
            ;(sssetfirst
              (setq STKRBEZ(ssget "_X" (list '(0 . "ATTDEF")'(2 . "STKRBEZ") (cons 410 (getvar "ctab")))))
            ;STKRBEZ)
            "" ; Das ist das "2. Enter"
        )
  ;Block speichern
  (command "_bsave")
  ;BEdit beenden
  (command "_.BClose")
);_defun

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

WuselStift
Mitglied


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

Beiträge: 8
Registriert: 26.09.2007

erstellt am: 26. Feb. 2014 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

Hallo cadffm,

eingehende Bemerkung habe ich ehrfürchtig zur Kenntnis genommen. Wohl wahr - eher mal am Lisp gekratzt 

Der Tip war die erwartete Hilfe!

Danke
Karsten

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