Hallo Heiko,
Zitat:
Original erstellt von Dorfy:
Dann zeig doch mal ein wenig Code,
dann kann man ja mal mitgrübeln...
Mfg Heiko
hier der gewünschte Code eines Befehls, während dessen die Lisp-Ausdrücke in die Liste des Zurück-Befehls eingetragen werden:
( defun c:ddzinfo ( /
ferrorsav
lzinfoangaben )
; Den Namen der Funktion für den Error-Fall sichern
(vl-doc-set '*cfunktionsave* "c:ddzinfo")
; Die Fehlerbehandlung vorbereiten
(setq ferrorsav *error*) ; bisherigen errorhandler sichern (lokale Variable für das Zurücksetzen, falls Befehl in Befehl gestartet wird)
(setq *error* error_acadwe) ; neuen errorhandler setzen (globale Variable)
; Den Beginn der Gruppe für den AutoCAD-Befehl "zurück" setzen
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
; Die Variablen für den ersten Aufruf des Fensters belegen
(setq lzinfoangaben nil)
; Das Dialogfenster starten und bearbeiten
(zinfo_dialog lzinfoangaben)
; Das Ende der Gruppe für den AutoCAD-Befehl "zurück" setzen
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
; Die Fehlerbehandlung zurücksetzen
(setq *error* ferrorsav) ; globale Variable
; Rückgabewert
(princ)
) ; Modulende
( defun zinfo_dialog ( lzinfoanggl
/
idclid idoneok iok
lzinfoang )
; Den Namen der Funktion für den Error-Fall sichern
(vl-doc-set '*cfunktionsave* "zinfo_dialog")
; Die lokalen Variablen belegen
(setq idoneok 1)
(setq lzinfoang lzinfoanggl)
; Die DCL-Datei laden
(setq idclid (load_dialog "acadwe.dcl"))
; Das Dialogfeld initialisieren, öffnen und anzeigen
(if (not (new_dialog "ddzinfo" idclid)) (abbruch "zinfo_dialog"))
; Die Angaben der Zusatzinformationen vorbelegen oder die bisherigen Angaben des Zusatzinformationenes ausgeben
(if (= lzinfoang nil)
(setq lzinfoang (zinfoangaben_vorbelegen))
(zinfoangaben_ausgeben lzinfoang) ; else
) ; if
; Die Funktionen für die Bearbeitung der DCL-Komponenten bekannt geben
(vl-doc-set '*lzinfoangat* lzinfoang)
(action_tile "crb_bemstd" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_bemket" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_bemlin" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_bempkt" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_zngname" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_ffcode" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
(action_tile "crb_wwinfo" "(vl-doc-set '*lzinfoangat* (zinfoangaben_ermitteln (vl-doc-ref '*lzinfoangat*)))")
; Das Dialogfeld anzeigen und Anwendereingabe ermöglichen
(setq iok (start_dialog))
; Die DCL-Datei aus dem Speicher entfernen
(unload_dialog idclid)
; Die Anwendereingaben bearbeiten
(setq lzinfoang (vl-doc-ref '*lzinfoangat*))
(cond
((and (= iok idoneok) (/= lzinfoang nil))
(zinfo_erstellen lzinfoang)
)
) ; cond
; Rückgabewert
(princ)
) ; Modulende
( defun zinfo_erstellen ( lzinfoangup
/
cafenster ckenbemket ckenbemlin ckenbempkt ckenbemstd ckenffcode ckenwwinfo ckenzngname clayersav
cstil cstilsav
ilpos
lbpktlalin lename llayer lxabstwwnr
rtextsizesav )
; Den Namen der Funktion für den Error-Fall sichern
(vl-doc-set '*cfunktionsave* "zinfo_erstellen")
; Eine Meldung ausgeben
(meldung_befehlszeile "Die Zusatzinformationen erstellen..." t)
; Die Angaben aus der Liste ermitteln
(setq ckenbemstd (zinfoangabenliste_wert_ermitteln lzinfoangup 1))
(setq ckenbemket (zinfoangabenliste_wert_ermitteln lzinfoangup 2))
(setq ckenbemlin (zinfoangabenliste_wert_ermitteln lzinfoangup 3))
(setq ckenbempkt (zinfoangabenliste_wert_ermitteln lzinfoangup 4))
(setq ckenzngname (zinfoangabenliste_wert_ermitteln lzinfoangup 5))
(setq ckenffcode (zinfoangabenliste_wert_ermitteln lzinfoangup 6))
(setq ckenwwinfo (zinfoangabenliste_wert_ermitteln lzinfoangup 7))
; Die Anzahl der Tafelanordnungen mit der Anzahl der Wehweiserränder/Pfeilwegweiser vergleichen
(rand_tafaodg_anzahl_vergleichen)
; Die aktuellen Systemvariablen ermitteln
(setq clayersav (getvar "clayer"))
(setq cstilsav (getvar "textstyle"))
(setq rtextsizesav (getvar "textsize"))
; Das Ansichtsfenster sichern
(setq cafenster "Zusatzinformationen")
(afenster_sichern cafenster)
; Alle Objekte anzeigen
(command "_.zoom" "grenzen")
; Die Elementnamen aller Hauptelemente ermitteln
(setq lename (elementnamen_ermitteln t nil))
; Die bisherigen Zusatzinformationen löschen
(c:zinfol)
; Die Koordinaten (X0/Y0) aller Acadwe-Objekte entsprechend dem Basispunkt des Blockes in den erweiterten Daten aktualisieren
(basispkt_block_eed nil lename nil) ; IMMER aktualisieren (ohne Wegweisernummer)
; Die Wegweiser-Nr. jedes Elements entsprechend der Lage zu den vorhandenen Wegweiserrändern/Pfeilwegweiser aktualisieren
(wwnr_ww_aktualisieren lename)
; Den Schalter für den Folienplot jedes Elements entsprechend der Lage zu den vorhandenen Wegweiserrändern/Pfeilwegweiser
; aktualisieren
(folienplot_negpos_ww_aktualisieren)
; Den Schalter für das Plotten der Grundfolie entsprechend der Lage zu den vorhandenen Wegweiserrändern/Pfeilwegweiser
; aktualisieren
(grundfl_plot_ww_aktualisieren)
; Den Textstil der Bemassung erstellen und als aktuellen Textstil setzen
(setq cstil "ZInfo")
(textstil_neu nil cstil "isocp.shx")
; Die Bemassung zeichnen
(cond
((= ckenbemstd "1")
(setq lxabstwwnr (bemassung_zeichnen lename 1))
)
((= ckenbemket "1")
(setq lxabstwwnr (bemassung_zeichnen lename 2))
)
((= ckenbemlin "1")
(setq lxabstwwnr (bemassung_zeichnen lename 3))
)
((= ckenbempkt "1")
(setq lxabstwwnr (bemassung_zeichnen lename 4))
)
) ; cond
; Den Namen der Zeichnung am Wegweiserrand/Pfeilwegweiser zeichnen
(if (= ckenzngname "1")
(zngname_ww_zeichnen lename)
) ; if
; Die Wegweiserinformationen zeichnen
(if (= ckenwwinfo "1")
(vl-doc-set '*lpktpltberfolverbgl* (wwinfo_zeichnen lename lxabstwwnr))
) ; if
; Den Folien_Farbcode incl. Legende zeichnen
(if (= ckenffcode "1")
(setq lbpktlalin (ffcode_zeichnen lename))
) ; if
; Die Zusatzspationierung zeichnen
(zspat_zeichnen lename lbpktlalin)
; Die Zeichnung regenerieren, wenn Schraffuren in der Zeichnung enthalten sind
(setq llayer (layerliste_erstellen))
(setq ilpos (listenpos_ermitteln llayer "schraffur" 0 2))
(if (/= ilpos nil)
(command "_.regen")
) ; if
; Das Ansichtsfenster zurückstellen
(afenster_wiederherstellen cafenster)
; Die Systemvariablen zurücksetzen
(setvar "clayer" clayersav)
(setvar "textstyle" cstilsav)
(setvar "textsize" rtextsizesav)
; Rückgabewert
(princ)
) ; Modulende
Gruß Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP