Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  reactor in lisp

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:  reactor in lisp (1196 mal gelesen)
zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 12. Mai. 2011 13:39    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,
ich habe ein Problem mit de reactoren. Ich weiß nicht genau welchen ich benutzen muss oder ob
es überhaut geht.
(im Moment nehme ich den command reactor mit vlr-commandEnded)
Ich habe in der Zeichnung viele verschiedene Blöcke und möchte den reactor nur aktivieren
wenn es ein Block ist dessen Name mit "P_" anfängt.
Ich klicke also einen Block an mit der linken Maustaste, greife ihn und verschiebe ihn.
Jetzt möchte z.B.: den Layer ändern, bekomme ich hin, aber dies macht der reactor für alles
was ich verschiebe (Linien, Schraffuren, Blöcke mit anderen Namen). Der Reactor muss aber
gucken ob es ein Block mit dem Namen "P_****" ist.
Nur dann soll der Layer oder irgendeine andere Eigenschaft geändert werden.

Ich hoffe jeamd hat da eine Idee.

Vielen Dank

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 12. Mai. 2011 19:25    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 zech 10 Unities + Antwort hilfreich

Hallo Zech,
wenn der Reactor schon soweit funktioniert, dann brauchst Du doch nur noch ein IF mit reinzubauen:

Angenommen der der betroffenen Block ist in der Variablen "OBJ" gespeichert:

(if (and (=(cdr(assoc 0(entget OBJ)))"INSERT")
        (wcmatch (cdr(assoc 2 (entget OBJ)))"P_*"))
    (progn
      (DannMachLayerUsw...

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

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

zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 13. Mai. 2011 06:22    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 joern,
ja das ist ja mein Problem. Wie ordne ich dem gepickten Objekt eine Variable zu? Es läuft ja kein Lisp-Programm ab. Ich klicke einfach ein Objekt an. Dann gehe ich an den Griffpunkt und verschiebe es. "vlr-commandended" greift jetzt, die callback-Funktion wird aufgerufen. Im "callback" gibt es ein "cond" auf "GRIP_STRETCH". Dieser Pfad im "cond" wird dann auch ausgeführt. Hier habe ich aber im Moment nur ein "princ" eingebaut um zu sehen ob die "callback-Funktion" und das "cond" funktionieren. Hier müsste ich jetzt aber irgendwie an das verschobene Objekt (an die Referenz) rankommen, nur da weiß ich nicht wie.

Danke nochmal

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: 13. Mai. 2011 07:42    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 zech 10 Unities + Antwort hilfreich

Wie ist es mit
vlr-object-reactor mit Object event :vlr-modified ?


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

zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 13. Mai. 2011 08: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

Hallo Cadmium,
habe ich schon dran gedacht. Ist aber so, das dem object-reactor vorher alle Objekte bekannt sein müssen. Man muss also ein oder mehrere Objekte dem reactor in einer Liste zuordnen (sog. owner).
Mal abgesehen von einem bestimmten Block, wie oben beschrieben. Ich möchte die Referenz des Objektes haben welches ich anklicke und verschiebe, das ist eigentlich alles, alles andere ist dann ein Kinderspiel.

Danke

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 13. Mai. 2011 13:16    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 zech 10 Unities + Antwort hilfreich

Nur mal so ins blaue getippt.

Was ist wenn du den Befehl zum Eigenschaften ändern neu definierst und dann nach der Wahl der Objekte diese prüfen läßt und nur dann wenn alles OK ist den Befehl aufrufst.

Sollen denn alle anderen Objekte nicht zu ändern sein können?

------------------
  Martin  

Viele Grüße aus dem schönen Münsterland!

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: 823
Registriert: 09.10.2004

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

erstellt am: 14. Mai. 2011 19:53    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 zech 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von zech:
Hallo Cadmium,
habe ich schon dran gedacht. Ist aber so, das dem object-reactor vorher alle Objekte bekannt sein müssen. Man muss also ein oder mehrere Objekte dem reactor in einer Liste zuordnen (sog. owner).
Mal abgesehen von einem bestimmten Block, wie oben beschrieben. Ich möchte die Referenz des Objektes haben welches ich anklicke und verschiebe, das ist eigentlich alles, alles andere ist dann ein Kinderspiel.

Danke


Dein Problem ist kein exotisches, sondern ein ganz und gar alltägliches im Umgang mit Reaktoren. Das Problem ist, dass Du einen Objektreaktor bräuchtest, dass aber eine vom Objektreaktor ausgelöste Funktion das den Reaktor auslösende Objekt nicht verändern darf.

Das geht logischerweise nur mit einer Kombination von Objekt- und Editor-Reaktor. Wenn Du alle Blockreferenzen überwachen willst, deren Namen mit "P-" beginnen, dann musst Du unmittelbar beim Öffnen der Zeichnung alle solchen Blockreferenzen und danach auch alle neu eingefügten Blöcke zu "Ownern" des Objektreaktors machen. Die Objektreaktorfunktion aber macht gar nix, außer dass sie alle Objekte, die den Reaktor auslösen, in einer globalen Liste sammelt.

Der Editor-Reaktor braucht jetzt nur nach dem Beenden der relevanten Befehle nachzusehen, welche Objekte in der globalen Liste stehen, und er kann diese dann nach Bedarf bearbeiten. Am Schluss setzt der Editor-Reaktor die globale Liste der veränderten Objekte wieder auf NIL, und gut isses.

Für Deine Anwendung kommen halt noch ein paar kleine Überwachungsfunktionen dazu. Beispielsweise kann ein Block umbenannt werden - wenn er danach nicht mehr mit "P-" anfängt, dann musst Du  alle seine Referenzen als Owner des Objektreaktors löschen, fängt der Name jetzt mit "P-" an, dann musst Du alle Referenzen nun hinzunehmen.

[Diese Nachricht wurde von archtools am 14. Mai. 2011 editiert.]

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

zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 16. Mai. 2011 06:35    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

Erstmal allen die geantwortet haben, Vielen Dank.
Die Lösung mit dem Objektreactor ist mir dann doch zu aufwändig.

Aber in Anlehnung an diese Frage eine Ergänzung.
Jetzt ganz ohne Reactor. Ich habe ein Objekt markiert durch klicken der linken Maustaste. Danach starte ich ein Lispprogramm. Ist es mir möglich in diesem Programm durch eine entsprechende Funktion festzustellen welches Objekt markiert ist. Eine Möglichkeit muss es doch geben, da bei der Markierung sich ja auch sofort das Eigenschaftenfenster aktualisiert und mir das Objekt anzeigt.

Danke

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 16. Mai. 2011 07:23    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 zech 10 Unities + Antwort hilfreich

Probier mal folgendes:
(sssetfirst (ssget "_P") (ssget "_P"))
und dann
(command "_.PROPERTIES")

hth

------------------
Schöne Grüße
Ernst

www.geopaint.at

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

zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 16. Mai. 2011 07:45    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

Ich denke das war ein guter Hinweis.
Ich habe allerdings "ssgetfirst" benutzt. Damit klappt es. Ich selektiere ein Objekt in der Zeichnung und ein nachträglich aufgerufenes Lispprogramm kann mit "ssgetfirst" das selektierte Objekt weiterverarbeiten.

Danke, ich denke der Fall ist gelöst.

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: 16. Mai. 2011 08: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 Nur für zech 10 Unities + Antwort hilfreich

ssgetfirst ist das eine, aber guck dir auch mal (ssget "I" ... ) an ... ist IMHO vielseitiger

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 16. Mai. 2011 12: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 Nur für zech 10 Unities + Antwort hilfreich

vlr-modified Reaktoren sind ziemlich böse, wenn im Reaktor das Reaktor-aufrufende Objekt geändert wird.

Frühere versionen von Autocad sind dabei gnadenlos abgestürtzt, da die im Reaktor aufgerufenen 'Änderung sofort wieder den Reaktor aufgerufen hat.

Neuere versionen verweigern mittlerweile jedliche Änderung im Reaktor.

Darum sind im Command-willStart (end) Reaktor auch kein (command "....) erlaubt.

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

zech
Mitglied



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

Beiträge: 89
Registriert: 09.11.2004

Autocad Architecture 2016
Civil3D 2016

erstellt am: 16. Mai. 2011 12:47    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

Das ist jetzt mein Ergebnis und es funktioniert sehr gut,
ohne Absturz oder Ähnlichem.

(vlr-command-reactor nil '( (:vlr-commandEnded . cmd-end-action)))

In der Prozedur "cmd-end-action" wird die Argumentenliste nach "GRIP_STRETCH" durchsucht, wenn ok dann wird mit "ssgetfirst" das Objekt identifziert und wenn das Objekt ein Block ist mit dem Namen "P_*" dann wird es geändert.

Dank an alle die hier gepostet haben.

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