| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Bemaßung im Block aktualisieren (161 mal gelesen)
|
Andreas Kraus Mitglied Elektrotechniker
   
 Beiträge: 1372 Registriert: 11.01.2006 Win 10 ACAD 2022
|
erstellt am: 15. Mrz. 2023 11:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, wenn ich etwas bei einem Bemaßungsstil ändere dann ändern sich Bemaßungen wenn ich auf OK geklickt habe. Ja, es gibt Außnahmen aber die sollen jetzt mal egal sein. Habe ich eine solche Bemaßung aber in einem Block dann ändert sich die erst mal nicht. Erst wenn ich den Block mit dem Blockeditor öffne wird dort die Bemaßung aktualisiert. Gibts da einen Weg wie das autobatisiert werden kann, von mir aus auch über LISP ? Ich bin da für alle Ideen offe. Hab hier grade einen (richtig üblen) Plan bei dem die Bemaßungsskalierung nicht stimmt aber die Bemaßungen sind in unzähligen Blöcken verteilt und wenn ich das über den Blockeditor aktualisieren sitze ich hier bis zur Rente dran. Auflösen ist übrigens keine Option. Wenn es keine kurze, einfache Lösung gibt hab ich schon die Idee mit copyobjects alles ins Modell zu schieben und nach der Aktualisierung zurück aber wenn ich mir das sparen kannn wär schon besser. Nebenbei bemerkt: Wer das gemacht hat gehört bestraft . Ganz schlimm bestraft ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
  
 Beiträge: 824 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 15. Mrz. 2023 18:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Andreas Kraus
Zitat: Original erstellt von Andreas Kraus: Hallo zusammen, wenn ich etwas bei einem Bemaßungsstil ändere dann ändern sich Bemaßungen wenn ich auf OK geklickt habe. Ja, es gibt Außnahmen aber die sollen jetzt mal egal sein.Habe ich eine solche Bemaßung aber in einem Block dann ändert sich die erst mal nicht. Erst wenn ich den Block mit dem Blockeditor öffne wird dort die Bemaßung aktualisiert. Gibts da einen Weg wie das autobatisiert werden kann, von mir aus auch über LISP ? Ich bin da für alle Ideen offe. Hab hier grade einen (richtig üblen) Plan bei dem die Bemaßungsskalierung nicht stimmt aber die Bemaßungen sind in unzähligen Blöcken verteilt und wenn ich das über den Blockeditor aktualisieren sitze ich hier bis zur Rente dran. Auflösen ist übrigens keine Option. Wenn es keine kurze, einfache Lösung gibt hab ich schon die Idee mit copyobjects alles ins Modell zu schieben und nach der Aktualisierung zurück aber wenn ich mir das sparen kannn wär schon besser. Nebenbei bemerkt: Wer das gemacht hat gehört bestraft . Ganz schlimm bestraft
Ohne es getestet zu haben, würde ich es so probieren: ENTUPD auf die Bemaßung in der Blockdefinition, ENTUPD auf die Blockdefinition selbst, und dann noch ENTUPD auf alle Blockreferenzen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
 
 Beiträge: 213 Registriert: 24.05.2005 Windows 10 BricsCAD V23
|
erstellt am: 16. Mrz. 2023 07:50 <-- editieren / zitieren --> Unities abgeben:          Nur für Andreas Kraus
|
Andreas Kraus Mitglied Elektrotechniker
   
 Beiträge: 1372 Registriert: 11.01.2006 Win 10 ACAD 2022
|
erstellt am: 16. Mrz. 2023 10:22 <-- editieren / zitieren --> Unities abgeben:         
@archtools : Hilft leider nicht @Vino : Plan speichern, schließen, neu öffnen ist leider auch keine Option Ich hab mal was mit copyobjects programmiert und grundsätzlich funktioniert das auch. Muss noch einiges dran basteln bis das zu einer "finalen Version" wird, aber nächste Woche hab ich etwas zeit ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
   
 Beiträge: 1372 Registriert: 11.01.2006 Win 10 ACAD 2022
|
erstellt am: 16. Mrz. 2023 12:52 <-- editieren / zitieren --> Unities abgeben:         
Habs. Funktioniert. Code: (defun c:k_dimupdate (/ ENT_DATA OBJ TEMP_DIM) ;;; Bemaßungen in Blöcken aktualisieren (defun k_->ent_name (name) ;;; Elementname zurückgeben (cond ((= (type name) 'ENAME) name ) ((= (type name) 'VLA-OBJECT) (vlax-vla-object->ename name) ) ((= (type name) 'STR) (handent name) ) ((= (type name) 'LIST) (cdr (assoc -1 name)) ) ) ) (defun k_->obj_name (name) ;;; VLA-OBJECT zurückgeben (cond ((= (type name) 'ENAME) (vlax-ename->vla-object name) ) ((= (type name) 'VLA-OBJECT) name ) ((= (type name) 'STR) (vlax-ename->vla-object (handent name)) ) ((= (type name) 'LIST) (vlax-ename->vla-object (cdr (assoc -1 name))) ) ) ) (defun k_ac-doc () (vla-get-activedocument (vlax-get-acad-object)) ) (defun k_copyobjects (obj_list quelle ziel ret / NEW_LIST) ;;; Beispiele für Ziel ;;; (vla-get-modelspace document_objekt) ;;; (vla-get-activelayout document_objekt) (if (null quelle) (setq quelle (k_ac-doc)) ) (cond ((= (type obj_list) 'ENAME) (setq obj_list (list (vlax-ename->vla-object obj_list))) ) ((= (type obj_list) 'VLA-OBJECT) (setq obj_list (list obj_list)) ) ((= (type obj_list) 'LIST) (setq obj_list (mapcar 'k_->obj_name obj_list)) ) (t nil) ) (setq obj_list (vl-remove 'nil (mapcar '(lambda (obj) (cond ((= (type obj) 'ENAME) (vlax-ename->vla-object obj) ) ((= (type obj) 'VLA-OBJECT) obj ) (t nil) ) ) obj_list ) ) ) (setq new_list (vl-catch-all-apply 'vlax-invoke (list quelle 'CopyObjects obj_list ziel) ) ) (if ret new_list nil ) ) (defun k_is (wert) ;;; Ja-nein-Wert konvertieren (cond ((= wert :vlax-false) nil) ((= wert :vlax-true) t) ((= wert nil) nil) ((= wert t) t) ((= wert 1) t) ((= wert 0) nil) ((= wert "1") t) ((= wert "0") nil) ((= wert "ja") t) ((= wert "nein") nil) ) ) (vlax-for blk (vla-get-blocks (k_ac-doc)) (if (not (k_is (vla-get-islayout blk))) (vlax-for obj blk (if (member (vla-get-objectname obj) '("AcDbRotatedDimension" "AcDbAlignedDimension" "AcDbArcDimension" "AcDbRadialDimension" "AcDbRadialDimensionLarge" "AcDbDiametricDimension" "AcDb2LineAngularDimension" "AcDb3PointAngularDimension" ) ) (progn (setq temp_dim (car (k_copyobjects obj nil (vla-get-modelspace (k_ac-doc) ) t ) ) ) (setq ent_data (entget (k_->ent_name obj))) (entmod (subst (assoc 2 (entget (k_->ent_name temp_dim))) (assoc 2 ent_data) ent_data ) ) (vla-delete temp_dim) ) ) (if (VLAX-METHOD-APPLICABLE-P obj 'update) (vla-update obj) ) ) ) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |