|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | Jetzt verfügbar: NVIDIA RTX PRO 6000 Blackwell Server Edition, eine Pressemitteilung 
 | 
| Autor | Thema:  Reaktor wieder laden (1632 mal gelesen) | 
 | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 Autocad 2021/64BWin10
 WORKSTATION Intel(R) CPU E5-1620 3.60GHz
 32 GB Ram
 64 Bit-Betriebssystem
 HP Designjet T7200
 Grafik NVIDIA Quadro P4000
 ZWCAD2021
 |    erstellt am: 25. Mrz. 2008 09:16  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo  Mit (vlr-remove-all) kann ich alle Reaktoren löschen.Aber wie kann ich die dann wieder laden.
 Wenn ich die Zeichnung schliesse und wiedr öffne dann ist alles wieder ok, das muss aber auch anders gehn.
 Danke
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | joern bosse Ehrenmitglied
 Dipl.-Ing. Vermessung und AutoLISPler
 
      
 
      Beiträge: 1781Registriert: 11.10.2004
 Window 11ACAD 2021
 CIVIL 2021
 BricsCAD ab V14
 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz   2.80 GHz
 32.0GB RAM
 NVIDIA GeForce MX450<P>
 |    erstellt am: 25. Mrz. 2008 09:17  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 25. Mrz. 2008 09:35  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 Autocad 2021/64BWin10
 WORKSTATION Intel(R) CPU E5-1620 3.60GHz
 32 GB Ram
 64 Bit-Betriebssystem
 HP Designjet T7200
 Grafik NVIDIA Quadro P4000
 ZWCAD2021
 |    erstellt am: 25. Mrz. 2008 12:01  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Also es will nicht funktionierenLade den Reaktor (load "bem_reaktor")
 funktioniert alles.
 lösche den Reaktor (vlr-remove-all) klappt auch alles.
 Aber wenn ich den Reaktor wieder laden will (load "bem_reaktor") bekomme ich immer ein nil zurück.
 Warum ? ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | CADmium Moderator
 Maschinenbaukonstrukteur
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 25. Mrz. 2008 12:33  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
  Weil das Lisp "bem_reaktor" vielleicht nil zurückgibt? Was liefert dir denn (vlr-reactors) vor und nach dem Laden? und was macht(if (=(load "splinecurve.LSP" "FEHLER")"FEHLER")
 (prompt "\n Fehler beim Laden von bem_reaktor")
 (prompt "\n bem_reaktor erfolgreich geladen")
 )
 
 ------------------
  - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 25. Mrz. 2008 12:46  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Thomas vor dem Laden Command: (vlr-reactors)nil
 nach dem Laden Command: (vlr-reactors)((:VLR-Command-Reactor #<VLR-Command-Reactor> #<VLR-Command-Reactor> ))
 und was macht(if (=(load "splinecurve.LSP" "FEHLER")"FEHLER")
 (prompt "\n Fehler beim Laden von bem_reaktor")
 (prompt "\n bem_reaktor erfolgreich geladen")
 )
 Command: 'VLIDEFehler beim Laden von bem_reaktor
 Command:
 
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | CADmium Moderator
 Maschinenbaukonstrukteur
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 25. Mrz. 2008 12:51  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
  "splinecurve.LSP" haste durch "bem-reaktor" ersetzt ? (hab ich von mir bloß reinkopiert, sorry) das (vlr-reactors) .. zeigt dir ja, das der Reaktor initialisiert worden ist ..
 ansonsten versteh ich nicht, was du willst ?? ------------------
  - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 25. Mrz. 2008 13:00  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Thomas Mit denem Beispiel ist er geladen, aber der Reaktor funktioniert nicht mehr.Wenn ich die Zeichnung öffne, und den Reaktor laden funktioniert er.
 Wen ich Reaktor mit (vlr-remove-all) lösche, und ich ihn dann wieder laden will, (in der gleichen Zeichnung) ist er geladen aber er funktioniert nicht mehr.
 Das ist mein Problem.
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 Autocad 2021/64BWin10
 WORKSTATION Intel(R) CPU E5-1620 3.60GHz
 32 GB Ram
 64 Bit-Betriebssystem
 HP Designjet T7200
 Grafik NVIDIA Quadro P4000
 ZWCAD2021
 |    erstellt am: 25. Mrz. 2008 13:08  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Thomas So sieht das mit deinem Lisp aus (if (=(load "Bem_Reaktor.LSP" "FEHLER")"FEHLER")(prompt "\n Fehler beim Laden von Bem_Reaktor")
 (prompt "\n Bem_Reaktor erfolgreich geladen")
 )
 und das bekomme ich zurück Command: 'VLIDEBem_Reaktor erfolgreich geladen
 Command:
 Command: 'VLIDE
 Command:
 Command: (vlr-reactors)
 nil
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | fuchsi Mitglied
 Programmierer c#.net Datawarehouse
 
     
 
      Beiträge: 1201Registriert: 14.10.2003
 AutoCad Version 2012 deu/enu<P>Windows 7 64bit
 |    erstellt am: 28. Mrz. 2008 11:01  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
  Tja ohne dass Du uns Dein bem_reaktor.lsp zeigst, werden wir wohl nur raten können. Ich vermute, dass der Reaktor einer Lispvariable zugewiesen wird, und diese vor dem setzten des Reaktors abgefragt wird. Mit vlr-remove-all löscht Du zwar die Reaktoren, aber wegen den gesetzten Lispvariablen glaubt dein Lisp-Programm, dass diese noch immer gesetzt sind, und definiert sie nicht neu. So in etwa kann ich es mir vorstellen.
 [Diese Nachricht wurde von fuchsi am 28. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 31. Mrz. 2008 10:11  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Fuchsi Hier das lisp Code:; Anfang der Datei
 ; Funktion zum Setzen des Reaktors
 (defun add-cmd-reactors( / )
 (vl-load-com)
 (vlr-command-reactor nil
 '( (:vlr-commandWillStart . cmd-start-callback))
 )
 (vlr-command-reactor nil
 '( (:vlr-commandEnded . cmd-end-callback))
 )
 )
 ; Funktion zum Setzen der Reaktoren
 (defun add-cmd-reactors( / )
 (vl-load-com)
 (if(not *cmd-reactor-added*)
 (progn
 (vlr-command-reactor nil
 '( (:vlr-commandWillStart . cmd-start-callback))
 )
 (vlr-command-reactor nil
 '( (:vlr-commandEnded . cmd-end-callback))
 )
 (setq *cmd-reactor-added* 'T)
 )
 )
 )
 ; allgemeine Cmd-Callback-Funktion
 ; (vor der Befehlsausführung)
 (defun cmd-start-callback(reactor argslist / )
 (cond
 ( (member(car argslist)'("DIMLINEAR""DIMALIGNED"
 "DIMRADIUS""DIMANGULAR"
 "DIMBASELINE""DIMDIAMETER"
 "DIMCONTINUE""QLEADER"))
 (dim-start-callback reactor argslist)
 )
 ( (=(car argslist)"BHATCH")
 (bhatch-start-callback)
 )
 )
 )
 ; allgemeine Cmd-Callback-Funktion
 ; (nach der Befehlsausführung)
 (defun cmd-end-callback(reactor argslist / )
 (cond
 ( (member(car argslist)'("DIMLINEAR""DIMALIGNED"
 "DIMRADIUS""DIMANGULAR"
 "DIMBASELINE""DIMDIAMETER"
 "DIMCONTINUE""QLEADER"))
 (dim-end-callback)
 )
 ( (=(car argslist)"BHATCH")
 (bhatch-end-callback)
 )
 )
 )
 ; Macht einen Layer aktuell
 (defun set-layer(name / )
 (vla-put-ActiveLayer
 (current-document)
 (vla-item(document-layers)name)
 )
 )
 ; gibt das Vla-Object zu einem
 ; Layernamen zurück
 (defun layer-object(name / result)
 (vlax-for layer(document-layers)
 (if
 (=(strcase name)
 (strcase(vla-get-name layer))
 )
 (setq result layer)
 )
 )
 result
 )
 ; Erzeugt einen neuen Layer
 (defun create-layer(name props / newlayer)
 (setq newlayer
 (vla-add (document-layers) name)
 )
 (foreach prop props
 (vlax-put-property
 newlayer (car prop)(cdr prop)
 )
 )
 newlayer
 )
 ; Ermittelt den aktuellen Layer
 (defun get-current-layer( / )
 (vla-get-activelayer
 (current-document)
 )
 )
 ; Gibt die Layer-Collection zurück
 (defun document-layers( / )
 (vla-get-layers
 (current-document)
 )
 )
 ; gibt die aktuelle Zeichnung zurück
 (defun current-document( / )
 (vla-get-activedocument
 (vlax-get-acad-object)
 )
 )
 ; Vorher-Callback für Schraffuren
 (defun bhatch-start-callback( / layer)
 (setq layer "--E-Schraffuren")
 (if(not(layer-object layer))
 (create-layer layer '((Color . 131)))
 )  (setq *previous-layer*(get-current-layer))
 (set-layer layer)
 )
 ; Nachher-Callback für Schraffuren
 (defun bhatch-end-callback( / )
 (if *previous-layer*
 (progn
 (vla-put-activelayer
 (current-document)
 *previous-layer*
 )
 (setq *previous-layer* nil)
 )
 )
 )
 ; Vorher-Callback für Bemaßungen(defun dim-start-callback(reactor argslist / layer)
 (setq layer "--E-Bemassung-Starkstrom")
 (if(not(layer-object layer))
 (create-layer layer '((Color . 5)))
 )
 (setq *previous-layer*(get-current-layer))
 (set-layer layer)
 )
 ; Nachher-Callback für Bemaßungen
 (defun dim-end-callback( / )
 (if *previous-layer*
 (progn
 (vla-put-activelayer
 (current-document)
 *previous-layer*
 )
 (setq *previous-layer* nil)
 )
 )
 )
 ; Sicherstellen, dass die ActiveX-
 ; Funktionen geladen sind
 (vl-load-com)
 ; Reaktoren beim Laden starten
 (add-cmd-reactors)
 ; Ende Datei
 
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | CADmium Moderator
 Maschinenbaukonstrukteur
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 31. Mrz. 2008 10:17  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
  wie fuchsi schon sagt ... es wird auf ne gesetzte Variable geprüft :  (if(not *cmd-reactor-added*)... und wenn die noch 'T ist .. wird eben der Reaktor nicht noch mal initialisiert.. ------------------
  - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 31. Mrz. 2008 12:05  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | CADmium Moderator
 Maschinenbaukonstrukteur
 
         
 
  
 
      Beiträge: 13533Registriert: 30.11.2003
 . |    erstellt am: 31. Mrz. 2008 12:21  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
  na indem du die Variable nach vlr-remove oder vlr-remove-all auch auf nil setzt, dir am besten dafür eine Routine bastelst die  am besten Reaktorobjekte merken ... (setq START(vlr-command-reactor nil
 '( (:vlr-commandWillStart . cmd-start-callback))
 )
 )
 und dann später so löschen
 (vlr-remove START)
 (setq *cmd-reactor-added* nil)
 oder bei Programmstart
 (vlr-reactors)
 auswerten und dann gegebenenfalls
 (setq *cmd-reactor-added* nil)
 setzen
 ------------------
  - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 31. Mrz. 2008 12:25  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | fuchsi Mitglied
 Programmierer c#.net Datawarehouse
 
     
 
      Beiträge: 1201Registriert: 14.10.2003
 AutoCad Version 2012 deu/enu<P>Windows 7 64bit
 |    erstellt am: 31. Mrz. 2008 14:32  <-- editieren / zitieren -->    Unities abgeben:           Nur für Dober Heinz   
 Code:; Anfang der Datei
 ; Funktion zum Setzen des Reaktors
 (defun add-cmd-reactors( / )
 (vl-load-com)
 (vlr-command-reactor nil
 '((:vlr-commandWillStart . cmd-start-callback)
 )
 (vlr-command-reactor nil
 '( (:vlr-commandEnded . cmd-end-callback))
 )
 )
 ; Funktion zum Setzen der Reaktoren
 (defun add-cmd-reactors( / )
 (vl-load-com)
 (if(not *cmd-reactor-added*)
 (progn
 (vlr-command-reactor nil
 '( (:vlr-commandWillStart . cmd-start-callback))
 )
 (vlr-command-reactor nil
 '( (:vlr-commandEnded . cmd-end-callback))
 )
 (setq *cmd-reactor-added* 'T)
 )
 )
 )
 
 Amerkungen1.
 Das erste Defun (fett markiert) ist abolut unnötig, da es mit dem 2. defun überschrieben wird!
 2. Da fehlt noch eine Reaktor
 Nämlich command_cancelled. Damit solte auch sichergestellt werden, wenn eine Befehl mit ESC abgebrochen wird, dass z.B.: der Layer wieder zurückgestellt wird.
 
 Code:
 ; Funktion zum Setzen der Reaktoren(defun add-cmd-reactors( / )
 (vl-load-com)
 (if(not *cmd-reactor-added*)
 (setq *cmd-reactor-added*
 (vlr-command-reactor nil
 '((:vlr-commandWillStart . cmd-start-callback)
 (:vlr-commandEnded . cmd-end-callback)
 (:vlr-commandCancelled . cmd-end-callback)
 )
 )
 )
 )
 )
 
 ------------------
   Ing. Anton Fuchs
 WWW.FFZELL.AT.TC
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 |    erstellt am: 31. Mrz. 2008 14:37  <-- editieren / zitieren -->    Unities abgeben:            | 
                       
 | Dober Heinz Mitglied
 Technischer Zeichner
 
     
 
      Beiträge: 1149Registriert: 20.12.2002
 Autocad 2021/64BWin10
 WORKSTATION Intel(R) CPU E5-1620 3.60GHz
 32 GB Ram
 64 Bit-Betriebssystem
 HP Designjet T7200
 Grafik NVIDIA Quadro P4000
 ZWCAD2021
 |    erstellt am: 07. Apr. 2008 08:24  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo  Danke für eure Hilfe Habe es so gelöst, und es funktioniert Code:; Funktion zum Setzen der Reaktoren
 (defun c:reaein()
 (vl-load-com)
 (if(not com:react)
 (progn
 (setq com:react
 (vlr-command-reactor nil
 ' ((:vlr-commandWillStart . cmd-start-callback)
 (:vlr-commandEnded . cmd-end-callback)
 (:vlr-commandCancelled . cmd-end-callback))))
 (princ "\n Reactor EIN ")
 ) ;ende progn
 ) ;ende if
 (princ)
 ) ;ende  c:reaein
  (defun c:reaaus()(if com:react
 (progn
 (vlr-remove com:react)
 (setq com:react nil)
 (princ "\n Reactor AUS ")
 ) ; ende progn
 ) ; ende if
 ) ; ende aus  c:reaaus
 ; allgemeine Cmd-Callback-Funktion; (vor der Befehlsausführung)
 (defun cmd-start-callback(reactor argslist / )(cond
 ( (member(car argslist)'("DIMLINEAR""DIMALIGNED"
 "DIMRADIUS""DIMANGULAR"
 "DIMBASELINE""DIMDIAMETER"
 "DIMCONTINUE""QLEADER"))
 (dim-start-callback reactor argslist)
 )
 ( (=(car argslist)"BHATCH")
 (bhatch-start-callback)
 )
 )
 )
 ; allgemeine Cmd-Callback-Funktion
 ; (nach der Befehlsausführung)
 (defun cmd-end-callback(reactor argslist / )
 (cond
 ( (member(car argslist)'("DIMLINEAR""DIMALIGNED"
 "DIMRADIUS""DIMANGULAR"
 "DIMBASELINE""DIMDIAMETER"
 "DIMCONTINUE""QLEADER"))
 (dim-end-callback)
 )
 ( (=(car argslist)"BHATCH")
 (bhatch-end-callback)
 )
 )
 )
 ; Macht einen Layer aktuell
 (defun set-layer(name / )
 (vla-put-ActiveLayer
 (current-document)
 (vla-item(document-layers)name)
 )
 )
 ; gibt das Vla-Object zu einem
 ; Layernamen zurück
 (defun layer-object(name / result)
 (vlax-for layer(document-layers)
 (if
 (=(strcase name)
 (strcase(vla-get-name layer))
 )
 (setq result layer)
 )
 )
 result
 )
 ; Erzeugt einen neuen Layer
 (defun create-layer(name props / newlayer)
 (setq newlayer
 (vla-add (document-layers) name)
 )
 (foreach prop props
 (vlax-put-property
 newlayer (car prop)(cdr prop)
 )
 )
 newlayer
 )
 ; Ermittelt den aktuellen Layer
 (defun get-current-layer( / )
 (vla-get-activelayer
 (current-document)
 )
 )
 ; Gibt die Layer-Collection zurück
 (defun document-layers( / )
 (vla-get-layers
 (current-document)
 )
 )
 ; gibt die aktuelle Zeichnung zurück
 (defun current-document( / )
 (vla-get-activedocument
 (vlax-get-acad-object)
 )
 )
 ; Vorher-Callback für Schraffuren
 (defun bhatch-start-callback( / layer)
 (setq layer "--E-Schraffuren")
 (if(not(layer-object layer))
 (create-layer layer '((Color . 131)))
 )  (setq *previous-layer*(get-current-layer))
 (set-layer layer)
 )
 ; Nachher-Callback für Schraffuren
 (defun bhatch-end-callback( / )
 (if *previous-layer*
 (progn
 (vla-put-activelayer
 (current-document)
 *previous-layer*
 )
 (setq *previous-layer* nil)
 )
 )
 )
 ; Vorher-Callback für Bemaßungen(defun dim-start-callback(reactor argslist / layer)
 (setq layer "--E-Bemassung-Starkstrom")
 (if(not(layer-object layer))
 (create-layer layer '((Color . 5)))
 )
 (setq *previous-layer*(get-current-layer))
 (set-layer layer)
 )
 ; Nachher-Callback für Bemaßungen
 (defun dim-end-callback( / )
 (if *previous-layer*
 (progn
 (vla-put-activelayer
 (current-document)
 *previous-layer*
 )
 (setq *previous-layer* nil)
 )
 )
 )
 
 
 ------------------
  Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |