Hallo,
ich sitze nun schon eine Weile an meinem Programm und es funktioniert irgendwie nicht. Kurz zur Idee:
In der Firma haben wir Blöcke mit einem Attribut die in eine neue Zeichnung kopiert werden. Beim kopiervorgang passiert nun etwas eigenartiges....bei einigen Blöcken (alles gleiche Referenz also gleicher Blockname) ist nach dem Kopiervorgang der Text des Attributes gespiegelt. Ich hab absolut keine Ahnung wie das zu stande kommt???
Nun versuche ich ein kleines Lisp zu schreiben, das bei allen Attributen aller Blöcke mit gleichem Namen den GC 71 einfach auf 0 (richitg) setzt, falls er auf 2 (gespiegelt) steht.
Als Testblock hab ich einfach einen Kreis mit einem Attribut erstellt (als Block), ihn in eine neue Zeichnung eingefügt und über 'Battman' den Attributstext auf "Zurück", also gespiegelt gestellt.
Starte ich nun mein Programm passiert nichts. Zu Debugging-Zwecken habe ich versucht das Programm Zeile für Zeile in der Befehlszeile abzugehen (natürlich nur für einen gewählten Block und nicht mit Abhandlung des Auswahlsatzes). Hier funktioniert es. Ich kann den Text "entspiegeln". Der Fehler liegt also irgendwo beim 'entmoden' des Auswahlsatzes "ss".
Vielleicht kann mir ja jemand helfen.
Gruß Markus
P.S. Ich hab mal die DWG mit den Testblöcken angehängt. Hier sind:
1 Block Attribut -Position gesperrt
1 Block Attribut - Position dynamisch verschiebbar
1 Block Attribut -Position nicht gesperrt
Code:
(defun C:aws (/ aws i j ent objname ss)
(vl-load-com)
;+++ "wirklichen" Namen über VLA ermitteln und abspeichern(bei Dynamischen Blöcken wird der "echte"
;+++Name des Blocks von AutoCAD durch einen Platzhalter ersetzt+++
;-----------------------------------------------------------------------------------------------------------------------------
(setq objname
(vla-get-EffectiveName
(vlax-ename->vla-object
(car(entsel "\nBlock wählen --> alle Blöcke mit dessen Namen werden geändert:")))))
;+++alle Blöcke der Zeichnung in einen Auswahlsatz speichern+++
;--------------------------------------------------------------------------------
(setq aws (ssget "X" '((0 . "insert"))))
(setq i 0)
;+++einen leeren Auswahlsatz erzeugen+++
;-------------------------------------------------------
(setq ss(ssadd))
;+++Auswahlsatz durch Ermittlung des EffectiveName erzeugen
;----------------------------------------------------------
(while ;---Start While
(setq ent (ssname aws i))
(if (= (vla-get-EffectiveName(vlax-ename->vla-object ent)) objname) ;---Wenn der Block den Namen des vom Benutzer ausgewählten Blockes hat,
(ssadd ent ss) ;----wird er in den Auswahlsatz "ss" gepackt
)
(setq i (1+ i))
) ;---Ende While
;+++Bearbeiten des Auswahlsatzes
;---------------------------------------------
(setq j 0)
(setq zähler 0)
(while
(setq ent (ssname ss j))
(if(= ;---Wenn...
(cdr(assoc 71(entget(entnext ent)))) 2) ;---...der Gruppencode 71 den Wert 2 (Text gespiegelt) hat...
(progn
(entmod ;---...ändere Ihn mit endmod in den Wert 0
(list
'(71 . 0)
(assoc -1 (entget(entnext ent)))
)
)
(setq zähler(1+ zähler))
)
)
(setq j (1+ j))
)
(command "attsync" "N" objname )
;+++Benutzerinformationen+++
;--------------------------------------
(princ "\n-------------------------------------------------------")
(princ "\n")
(princ Zähler) ;---Wieviele Attribute wurden verändert
(princ " x ")
(princ "---")
(princ objname ) ;---Welchen Namen hatte der Block
(princ "---")
(princ " geändert!")
(princ "\n-------------------------------------------------------")
(princ)
) ;---Programmende
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP