Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  mal wieder ein reaktor...

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:  mal wieder ein reaktor... (943 mal gelesen)
fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 25. Nov. 2003 16:26    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 mit folgenden reaktor geschrieben :

;*******************************************************************
;************************ fc_db ************************************
;*******************************************************************

(defun rechteck_geaendert (/)
  (princ "\ndas rechteck wurde geändert !")
)

(defun fc_reaktor_fcdb_vorher(/)
  (princ "\nVorher !")
);defun

(defun fc_reaktor_fcdb_nachher(/)
  (princ "\nNachher !")
  (setq *objektliste* (list (vlax-ename->vla-object (entlast))))
  (princ)
);defun

;*******************************************************************
;************************ reaktor **********************************
;*******************************************************************
; vor der Ausführung eines Befehles
(defun fc_reaktor_vorher (reactor argslist / )
  (cond
    ((member (strcase (car argslist)) '("RECTANG"))(fc_reaktor_fcdb_vorher))
  );cond
)

; nach der Ausführung eines Befehles
(defun fc_reaktor_nachher (reaktor argslist / )
  (princ "\n")
  (princ reactor)
  (princ "\n")
  (princ argslist)
  (cond
    ((member (strcase (car argslist)) '("RECTANG"))(fc_reaktor_fcdb_nachher))
  );cond
)

; Funktion zum Setzen des Reaktors
(defun c:rea( / )
  (vl-load-com)
  (if (= *testreaktor* nil)
    (progn
      (setq *testreaktor*
    '(
      (vlr-command-reactor nil '((:vlr-commandWillStart . fc_reaktor_vorher)))
              (vlr-command-reactor nil '((:vlr-commandEnded . fc_reaktor_nachher)))
      (vlr-object-reactor *objektliste* nil '((:vlr-modified . rechteck_geaendert)))
      (vlr-object-reactor *objektliste* nil '((:vlr-objectClosed . rechteck_geaendert)))
    )
      );setq
      (princ "\nNeuer reaktor")
    );progn
  );if
);defun


funktion:

ich zeichne ein rechteck mit "_rectang" und der reactor wird vor und nach dem befehl aktiviert. das klappt ja auch. ich habe noch einen zweiten reaktor eingefügt, der immer dann anspringen soll, wenn dieses rechteck verändert wird. kalppt aber nicht . sehe ich die ganze sache in meinem programm etwas zu einfach ?

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

MfG
Frank

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 26. Nov. 2003 12: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

jupp - zu einfach!
erstens woher soll dein Reaktor (der 2.) wissen, wann das Rechteck verändert wird?
Du mussst das Rechteck also kennzeichnen, damit es in ein Kriterienliste passt

zweitens: überlege dir, mit welchen Möglichkeiten so ein Objekt verändert werden könnte

Aber es ist sicherlich am einfachsten, well du nur dei Objekte überwachen lässt, die ein z.b. von dier definiertes xdata tragen.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 26. Nov. 2003 13: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

was sind denn xdatas ?

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

MfG
Frank

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 26. Nov. 2003 14: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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,

das sind erweiterte Elementdaten. Gruppencode 3.

Mein Ansatz wäre:
einen Command-ENDE-Reaktor, der den Rechteckbefehl abfängt und an das zuletzt erstellte Rechteck einen Objektreaktor dranhängt. Zusätzlich dazu werden in dieser Funktion die Texte für Höhe und Breite erstellt. Die Handle dieser neu erstellten Texte wird als XDATA im Rechteck gespeichert.
Dann brauchst du nur noch eine Reaktorfunktion, die aufgrund des Rechteck-Objektreaktors anspringt. Diese liest dann die neuen Maße und die TextHANDLE aus dem rechteck aus und Aktualisiert damit dann die Texte.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
NEU: AutoLISP- Projektschulung
NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren
AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 27. Nov. 2003 09: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

moin ihr,

ich habe mal in die hilfe geschaut und würde es wohl hinkriegen so ein xdata an ein objekt zu hängen. jetzt muss ich nur noch wissen was ich anhängen muss. was ist ein texthandle ? der text (höhe bzw. breite), der name des textobjektes oder ...?

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

MfG
Frank

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 27. Nov. 2003 10:17    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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,

das ist die Objektreferenz Gruppencode 5 des Textobjektes.
Diese ID bleibt im Gegensatz zum Gruppencode -1, dem Elementnamen, auch beim erneuten Öffnen gleich.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 28. Nov. 2003 07:36    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

moin,

hier mein neur code, müsste eigentlich auch bei euch laufen :

;aufruf: (fc_text zeile ep layername farbnr texthoehe textstil)
(defun fc_text (zeile ep layername farbnr texthoehe textstil /)
  (entmake (list
    '(0 . "TEXT")
    (cons 1 zeile)
    (cons 7 textstil)
    (cons 8 layername)
    (cons 10 ep)
    (cons 40 texthoehe)
    '(41 . 0.8)
    (cons 62 farbnr)
    ))
);defun


;aufruf: (fc_rechteck ep zp layername farbnr faktor linientyp)
(defun fc_rechteck (ep zp layername farbnr faktor linientyp /)
  (if (and (NULL (tblsearch "ltype" linientyp)) (/= linientyp "byblock") (/= linientyp "bylayer") (/= linientyp 0))
    (command "linientyp" "laden" linientyp "acadiso.lin" "")
  );if
  (entmake (List
    '(0 . "LWPolyline")
    '(100 . "AcDbEntity")
    '(100 . "AcDbPolyline")
    '(90 . 4) 
    '(70 . 1)
    (cons 6 linientyp)
    (cons 8 layername)
    (cons 48 faktor)
    (cons 62 farbnr)   
    (cons 10 (trans (list (car ep) (cadr ep) 0) 1 0))
    (cons 10 (trans (list (car zp) (cadr ep) 0) 1 0))
    (cons 10 (trans (list (car zp) (cadr zp) 0) 1 0))
    (cons 10 (trans (list (car ep) (cadr zp) 0) 1 0))
  ))
);defun


  (defun fc_polypunkte (fcpolygon /)
    (setq punktliste nil)
    (foreach n fcpolygon
      (if (= (car n) 10)
        (progn
          (setq punktliste (append punktliste (list (cdr n))))
        );progn
      );if
    );foreach
  );defun


  (defun fc_text_aendern ( / n alttext neutext altpos zaehler neuelement)
    (setq zaehler 0)
    (foreach n (vlr-owners reactor-object)
      (if (= (cdr (assoc 0 (entget (vlax-vla-object->ename n)))) "TEXT")
(progn
          (princ "\nElement : ")
          (setq alttext (assoc 1 (entget (vlax-vla-object->ename n))))
          (princ (strcat "(" (rtos (car (nth zaehler punktliste))) "," (rtos (cadr (nth zaehler punktliste))) ")"))
          (setq neutext (cons 1 (strcat "(" (rtos (car (nth zaehler punktliste))) "," (rtos (cadr (nth zaehler punktliste))) ")")))
          (setq altpos (assoc 10 (entget (vlax-vla-object->ename n))))
  (setq neupos (cons 10 (append (nth zaehler punktliste) (list 0.0))))
  (setq neuelement (subst neutext alttext (entget (vlax-vla-object->ename n))))
  (entmod neuelement)
  (setq neuelement (subst neupos altpos (entget (vlax-vla-object->ename n))))
  (entmod neuelement)
);progn
      );if
      (setq zaehler (+ zaehler 1))
    );foreach
  );defun

 
  (defun fc_db_aendern (notifier-object reactor-object argslist / punktliste n)
    (cond
      ((= (cdr (assoc 0 (entget (vlax-vla-object->ename notifier-object)))) "LWPOLYLINE")
          (progn
            (fc_polypunkte (entget (vlax-vla-object->ename (nth 4 (vlr-owners reactor-object)))))
            (fc_text_aendern)
            (princ "\nDas Rechteck wurde verändert !")
          );progn
      )
      ((= (cdr (assoc 0 (entget (vlax-vla-object->ename notifier-object)))) "TEXT")
          (princ "\nDer Text wurde geändert !")
      )
    );cond
    (princ)
  );defun


(defun fc_db_zeichnen (pul por / a)
  (vl-load-com)
  (fc_rechteck pul por "0" 1 1.00 "continuous")
  (setq meinrechteck (list (vlax-ename->vla-object (entlast))))
  (fc_polypunkte (entget (entlast)))
  (foreach a punktliste
    (princ "\n")
    (princ a)
  (fc_text (strcat "(" (rtos (car a)) "," (rtos (cadr a)) ")") a "0" 2 1.8 "standard")
    (setq meinrechteck (append meinrechteck (list (vlax-ename->vla-object (entlast)))))
  );foreach
  (setq fc_db_reaktor (vlr-object-reactor meinrechteck "fc_db_reaktor" '((:vlr-modified . fc_db_aendern))))
  (vlr-pers fc_db_reaktor)
  (princ "\n")
  (princ meinrechteck)
  (princ)
);defun


;*************

(defun c:ld ()
  (fc_db_zeichnen (getpoint "ep : ") (getpoint "zp : "))
  (princ)
);defun
 

ich bin jetzt so weit, dass die text mit den geänderten eckpunkten verschoben und aktualisiert werden. wie finde ich denn heraus, welche punkte sich verändert haben, ich will es erreichen, dass mein rechteck immer bestehen bleibt.

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

MfG
Frank

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