Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Object-Reactor - erased

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:  Object-Reactor - erased (1675 mal gelesen)
reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 06. Jun. 2012 13:10    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

Hello liebe Menschen,
Gibs denn eine möglichkeit im CallBack von :vlr-erased an das gelöschte Object ranzukommen, bzw. die Xdata oder entget-Liste auszulesen?

Habe versucht das ganze über ein Undo im CallBack zu lösen um zunächst die Dinge die ich brauche auszulesen, um danach dann wieder ein redo zu senden. funktioniert nicht wirklich.

Gibt es irgendwie die möglichkeit das erased-Flag eines VLA-Object's auf "unerased" sprich 'nil zu setzen bzw. danach dann wieder auf 'T?

Lg Reltro

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 06. Jun. 2012 13:28    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 reltro 10 Unities + Antwort hilfreich

jetzt ungetestet ...lese die Objektdaten bei :vlr-openedForModify
aus, der sollte IMHO auch beim löschen feuern und nutze sie dann bei :vlr-erased

Was ist der Hintergrund des Ganzen ?

------------------
  - 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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 06. Jun. 2012 14: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

hm, ok danke, werd ich testen...

Der Hintergrund des Ganzen ist es Objekte miteinander zu verknüpfen, wobei eines der Objekte die Basis darstellt und ich eben rausfinden muss um welches Objekt es sich beim Gelöschten handelt, um im weiteren das zu tun was zu tun ist 
Aso, es können mehrere BasisObjekte vorhanden sein.
Identifiziert werden sie über die XData's

Und weil ich nicht für jedes Objekt bzw. BasisObjekt einen anderen Reactor anlegen will, möchte ich versuchen das ganz so zu lösen. Sprich, dass das Ganze in einer abgeschlossenen Umgebung eines einzelnen Reactors stattfinden kann.

------------------------------------------------------
Bin grad dabei ein Object-Reactor-Template zu erstellen, in welches lambda-expressions eingelagert werden.

Das Ganze hab ich für die einfachsten Reaktionen bereits geregelt.

So zb. :VLR-modified... wo es zunächst eine lambda-expr gibt die zum überprüfen da ist, ob die Änderung relevant ist, und eine andere lambda-expr um gegebenfalls die Änderung rückgängig zu machen oder was auch immer; wobei die 2te lambda-expr in einem :vlr-commandEnded bzw. :vlr-lispEnded abgehandelt wird, dessen CallBack aus dem CallBack des ObjectReactors erstellt wird, und der zu erwartende Ended-Reactor erstellt oder wenn schon als Object vorhanden, aktiviert wird. Das Callback des Ended-reaktors wirdnach ablauf seiner selbst auf den ürsprünglichen Wert der Variable mit dessen Namen zurückgesetzt.
------------------------------------------------------
Zb.: ich sag dem Ding dass die Objekte auf Layer "0" bleiben müssen, und die Farbe "byLayer"
-> funktioniert...
und das Ganze mit einem Aufruf der Template-Funktion ohne die einzelnen Reaktoren direkt/manuell zu implementieren.

Nun möchte ich das ganze eben auf die gesamte Palette der Object-reactoren erwetern.


Lg reltro

Ps.: Ergebnisse des Test's werden nachgereicht
bis dahin danke Cadmium

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 08. Jun. 2012 22:06    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

So, hab nun einen dezenten Test des ganzen durchgeführt, wobei das Ergebniss nicht wirklich zufriedenstellend ist, weil es in einem Fehler ended.

Ich habe nun einfach mal alle object-reactoren geladen und mit einem Callback versorgt, um mal zu sehn wie und wann welcher reaktor gefeuert wird.
Zudem hab ich im :vlr-openedForModify versucht den Layer des Owners auszulesen, welcher bei einer Linie hoffentlich vorhanden ist  

Folgender Error:
-----------------------------------------------------------
; error: Automation Error. Object was open for write
-----------------------------------------------------------

Und der Code der diesen produziert:

Code:

(vl-load-com)

(vlr-object-reactor
       (list
              (vlax-ename->vla-object (car (entsel)))
       )
       "test"
       '(
              (:vlr-cancelled . cancelled)
              (:vlr-copied . copied)
              (:vlr-erased . erased)
              (:vlr-unerased . unerased)
              (:vlr-goodbye . goodbye)
              (:vlr-openedForModify . openedForModify)
              (:vlr-modified . modified)
              (:vlr-subObjModified . subObjModified)
              ;(:vlr-modifiedUndone . modifiedUndone)
              (:vlr-modifiedXData . modifiedXData)
              (:vlr-unappended . unappended)
              (:vlr-reappended . reappended)
              (:vlr-objectClosed . objectClosed)
       )
)
;------------------------------------------------------
(defun cancelled (a b c / )
       (princ "\ncancelld")
)
;------------------------------------------------------
(defun copied (a b c / )
       (princ "\ncopied")
       (princ "---")
       (princ c)
)
;------------------------------------------------------
(defun erased (a b c / )
       (princ "\nerased")
)
;------------------------------------------------------
(defun unerased (a b c / )
       (princ "\nunerased")
)
;------------------------------------------------------
(defun goodbye (a b c / )
       (princ "\ngoodbye")
)
;------------------------------------------------------
(defun openedForModify (a b c / )
       (princ "\nopenedForModify")
       (princ " - ")
       (princ (vla-get-layer a))       ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
)
;------------------------------------------------------
(defun modified (a b c / )
       (princ "\nmodified")
)
;------------------------------------------------------
(defun subObjModified (a b c / )
       (princ "\nsubObjModified")
)
;------------------------------------------------------
(defun undoneMod (a b c / )
       (princ "\nundoneMod")
)
;------------------------------------------------------
(defun modifiedXData (a b c / )
       (princ "\modifiedXData")
)
;------------------------------------------------------
(defun unappended (a b c / )
       (princ "\nunappended")
)
;------------------------------------------------------
(defun reappended (a b c / )
       (princ "\nreappended")
)
;------------------------------------------------------
(defun objectClosed (a b c / )
       (princ "\nobjectClosed")
       (princ " - ")
       (princ (vla-get-layer a))
)


Hm, also programmier-technischen Fehler kann es wohl keiner sein, wenn dann wohl eher ein jener im DenkVorgang.

Hab auch versucht den Reactor vor dem auslesen des Layers zu deaktivieren -> ohne Erfolg, was mich auch nicht wirklich verwundert.

Zudem:
(entget (vlax-VLA-Object->Ename Owner)) -> 'nil


 
Nun, wie nun?
Hat jemand einen Vorschlag?
Es sollte, hoffentlich, irgendwie möglich sein.

Ich weiß nicht ob es von einem Reactor zu viel verlangt ist, Ursprungs- und End-Object vergleichen zu können.  

......................................................................

Ich meine ich wüsste einen Weg:

Vlr-editor-reactor mit LispWillStart und CommandWillStart und das Auslesen der gewünschten Daten aller Owner des ObjectReactor und speichern in einer globalen Variable.

Nur kann ich mir fast nicht vorstellen dass es das sein soll, weil wohl eher RechenIntensiv.

Auserdem, dieses Konstrukt, so wie ich es bemerkt habe, nicht feuert, wenn die Eigenschaften aus den Properties geändert werden. Also auch ein eher unnötiger Weg.


 
VLR-Object-Reactor vs. VLR-acdb-Reactor <--- Ein Weg?


Lg reltro

[Diese Nachricht wurde von reltro am 08. Jun. 2012 editiert.]

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 09. Jun. 2012 11:58    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

hmmm...

habe nun einen Weg gefunden das Erase-Flag von 'T auf 'nil und umgekehrt zu setzen, nähmlich mit:
(entdel <ename> )
!!! [EDIT] Funktioniert im Reactor iregendwie nicht

Ist zwar in einer gewissen Art und weise das was ich gesucht habe, aber leider nicht unbedingt das was sich in der weiteren Überlegung herausgestellt hat, nähmlich:

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

Dass es schon schön wäre, egal welcher reactor nun dann gefeuert wird, bei :VLR-openedForModify bereits die Daten auslesen zu können und dann bei :VLR-ObjectClosed die gesammelten Infos zu vergleichen, weil dadurch wohl einige der Reaktoren (außer wohl :VLR-copied) an überfluss gewinnt.
Man möge mich Tot-schlagen, weil diese Aussage natürlich nicht immer zutrifft.

Ich Will mal behaupten dass zumindest der :VLR-Modified, :VLR-Erased, :VLR-Unerased überflüssig werden können. Die anderen kann ich nicht beurteilen, weil ich noch nicht herausgefunden habe wann diese feuern, wie zb. :VLR-Goodbye

------------------------------------------------------------
Desshalb wär ich dankbar um einen Denkanstoss zur Möglichkeit Daten im :VLR-openedForModify auszulesen.
Das eizigste was ich bis jetzt ohne Fehler geschafft habe ist das Auslesen des ENAME's was für (entdel ...) wichtig ist, um gegebenfalls das erased-Flag von 'T auf 'nil zu setzen.

Lg reltro

[EDIT] Wie sich herausgestellt hat, funktioniert (entdel <Ename> ) im reaktor nicht um das erased-Flag zu ändern...
Also wieder von vorn :|

[Diese Nachricht wurde von reltro am 09. Jun. 2012 editiert.]

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 11. Jun. 2012 12:34    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

Hat denn niemand einen Vorschlag für mich?
Niemand? 

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 11. Jun. 2012 12:57    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 reltro 10 Unities + Antwort hilfreich

Eine Weisheit der Dakota-Indianer :

Wenn du merkst,
dass du ein totes Pferd reitest,
steig ab!

Ohne jetzt näher drauf einzugehen ( ist ja DEIN Problem und nicht MEINS  ) ..vielleicht solltest du einen anderen Ansatz verfolgen ?!


aber zu den ObjektReaktoren:
... man kann denen ja Daten mitgeben ... ob Handle oder Layer ....

(setq REACTOR(vlr-object-reactor
                (list OBJ1)
                (vla-get-handle OBJ2)  ;<--- Hier
                (list(cons :vlr-objectClosed  'OBJ1:MODIFIED))
            ) 
)

und in der Funktion OBJ1:MODIFIED kann man mit
(vlr-data-set REACTOR .... ) die Daten auch modifizieren

------------------
  - 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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 11. Jun. 2012 13:15    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

Hello Thomas,

sehr schönes Zitat...    und so wahr

Naja, jetzt, nachdem du zitierst, weiß ich auch, dass ich das arme Pferd totgeritten habe/war/ist.
Hab auf jeden Fall wieder mal was gelernt.

Werd mich an eine andere Art der Lösung machen.

Lg und Danke - U's 4 u
Reltro

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