Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Hochzahlenbemaßung und Reaktoren

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:  Hochzahlenbemaßung und Reaktoren (691 mal gelesen)
homer4480
Mitglied



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

Beiträge: 11
Registriert: 08.07.2007

erstellt am: 08. Jul. 2007 15: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

Hallo,

jetzt habe ich mich auch einmal in diesem tollen Forum angemeldet. Eigentlich bin ich Änfänger was die Lisp-Programmierung angeht, aber ich habe mich mit den Seiten von mapcar mal ein wenig durchgehangelt. Jetzt habe ich probiert einen Bemaßungsreaktor zu bauen, der mir automatisch die letzte Stelle der Bemaßung hoch setzt und dabei noch assoziativ ist.

Das Ganze soll so funktionieren, dass der Reaktor immer nur bei einem Stil anspringt und alle anderen Bemaßungen in Ruhe gelassen werden. Soweit habe ich das auch hinbekommen und er macht genau das was ich möchte. Es gibt nur ein Problem. Wenn ich versuche bei dem gewählten Bemaßungsstil (AT-Bem) Eigenschaften über die Toolbar-Control-Felder (Toolbar-Steuerung) zu ändern stürzt der ab. Dies passiert wenn ich z.B. eine andere Farbe zuweise, oder auch wenn ich den BemStil wähle. Bei der Layersteuerung beendet er zwar nicht komplett, aber bringt eine Fehlermeldung:

Befehl: ; Fehler:  Ausnahmebedingung aufgetreten: 0xC0000005
(Zugriffsverletzung)
; Warnung: Unwind übersprungen bei Ausnahmebedingung
; Fehler:  Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung)
*Abbruch*

Hier erstmal der Code:

Code:
(defun c:acadt-reakhbem ()

  (vl-load-com)
  (if (not *acadt-hbem*)

    (setq *acadt-hbem* (vlr-acdb-reactor *acadt-hbem*
'((:vlr-objectAppended . acadt-hochbem)
  (:vlr-objectModified . acadt-hochbem)))))
  (princ)
  )

;-------

(defun acadt-hochbem (reactor acadt-objekt / )

  (if (and
(= "DIMENSION" (cdr (assoc 0 (entget (cadr acadt-objekt)))))
(= "AT-BEM" (cdr (assoc 3 (entget (cadr acadt-objekt))))))

    (progn
     
    (setq acadt-auswahl (entget (car (cdr acadt-objekt)))
  acadt-zahl2  (cdr (assoc 42 acadt-auswahl))
  acadt-auswahl (cdr (assoc -1 (entget (tblobjname "BLOCK" (cdr (assoc 2 acadt-auswahl)))))))

    (while (/= "MTEXT" (cdr (assoc 0 (entget acadt-auswahl))))
      (setq acadt-auswahl (entnext acadt-auswahl)))

    (setq acadt-auswahl (entget acadt-auswahl))

    (setq acadt-dimzin (getvar "DIMZIN"))
    (setvar "DIMZIN" 1)

    (if (> acadt-zahl2 0.995)
      (progn
(setq acadt-zahl      (rtos acadt-zahl2 2 3))
(setq acadt-hochzahl  (substr acadt-zahl (strlen acadt-zahl) 1))
(setq acadt-zahl      (substr acadt-zahl 1 (1- (strlen acadt-zahl))))

(if (/= "0" acadt-hochzahl)
  (setq acadt-bemtext (strcat "\\A1;" acadt-zahl "{\\H0.7x;\\S" acadt-hochzahl "^;}"))
  (setq acadt-bemtext (strcat "\\A1;" acadt-zahl)))))

    (if (<= acadt-zahl2 0.994)
      (progn
(setq acadt-zahl      (rtos (* acadt-zahl2 100) 2 1))
(setq acadt-hochzahl  (substr acadt-zahl (strlen acadt-zahl) 1))
(setq acadt-zahl      (substr acadt-zahl 1 (- (strlen acadt-zahl) 2)))

(if (/= "0" acadt-hochzahl)
  (setq acadt-bemtext (strcat "\\A1;" acadt-zahl "{\\H0.7x;\\S" acadt-hochzahl "^;}"))
  (setq acadt-bemtext (strcat "\\A1;" acadt-zahl)))))

    (setvar "DIMZIN" acadt-dimzin)

    (entmod (subst (cons 1 acadt-bemtext) (assoc 1 acadt-auswahl) acadt-auswahl)))
    )
  )

(c:acadt-reakhbem)


Wie gesagt, ich bin noch nicht so fit, also nicht treten!

Ich habe bereits rausgefunden, dass die Abstürze durch das entmode verursacht werden. Wenn ich die Zeile raus nehme und z.B. durch ein princ ersetze bleibt ACAD stabil.

Hat jemand Ahnung warum dies passiert, bzw. wie ich das abfangen kann? evtl. gibt es ja auch noch andere Möglichkeiten den Text zu überschreiben, außer mit endmode.

Schon mal danke für die Hilfe.

Gruß Christian

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

homer4480
Mitglied



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

Beiträge: 11
Registriert: 08.07.2007

erstellt am: 08. Jul. 2007 20: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

Nochmal Hallo,

jetzt habe ich es hin bekommen. ich habe einfach den entmod geben das hier getauscht:

Code:
(vla-put-TextString (vlax-ename->vla-object(cdr (assoc -1 acadt-auswahl)))acadt-bemtext)

Jetzt würde mich aber nur noch interessieren, warum das mit endmod nicht ging??
Sieht wer noch ein paar Dinge die man so nicht lassen sollte?

Viele Grüße,
Christian

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: 09. Jul. 2007 05:41    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 homer4480 10 Unities + Antwort hilfreich

Mit deinem Code schickst du dein Acad in eine Endlos-Schleife. Du manipulierst das Objekt, welches den Reaktor startet, sobald es geändert wird.
Schau mal in diesem Beitrag, da steht dazu etwas.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

homer4480
Mitglied



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

Beiträge: 11
Registriert: 08.07.2007

erstellt am: 09. Jul. 2007 09: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

Hallo Holger,

danke für Deine Antwort. Leider verstehe ich aber nicht ganz warum ich mein ACAD in eine Endlosschleife bringen soll. Ich bearbeite doch nicht das Bemaßungsobjekt, sondern bereits den MTEXT. Siehe hier:

Code:
(while (/= "MTEXT" (cdr (assoc 0 (entget acadt-auswahl))))
      (setq acadt-auswahl (entnext acadt-auswahl)))

Gruß Christian

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