| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Attribut zurückspiegeln GC 71 (1221 mal gelesen)
|
Madler Mitglied Technischer Zeichner

 Beiträge: 30 Registriert: 13.07.2011 AutoCAD 2010 Autodesk MEP 2012
|
erstellt am: 03. Jun. 2012 14:57 <-- editieren / zitieren --> Unities abgeben:         
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 |
Geos Mitglied Vermessungstechniker i.R.
   
 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: 03. Jun. 2012 17:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Madler
|
Madler Mitglied Technischer Zeichner

 Beiträge: 30 Registriert: 13.07.2011 AutoCAD 2010 Autodesk MEP 2012
|
erstellt am: 03. Jun. 2012 17:51 <-- editieren / zitieren --> Unities abgeben:         
Ich hab (entupd ent) in die Schleife eingefügt, ergab aber keine Besserung. Code:
(while (setq ent (ssname ss j)) (if(= (cdr(assoc 71(entget(entnext ent)))) 2) (progn (entmod (list '(71 . 0) (assoc -1 (entget(entnext ent))) ) ) (setq zähler(1+ zähler)) ) ) (entupd ent) (setq j (1+ j)) )
Ich hab nochmal folgendes getestet: 1. Block eingefügt 2. mit Battman Attributstext gespiegelt 3. 2.Block eingefügt (Text richtig) 4. Lisp gestartet --> Das Programm sollte eigentlich den Text des neuen Attributes unberührt lassen da es ja richtig ist. Durch den attsync im Programm wird aber das neue Attribut auch auf gespiegelt (wie beim ersten Attribut) gesetzt. Das heißt also das 'entmod' garnicht arbeitet sonder nur attsync... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Anzeige: | Infos zum Werbeplatz >> | GeoTools CAD APP für Tiefbau, Facility Management, GIS, Vermessung und Kartografie GeoTools is a geo-data application that is useful to view, create, modify, analyze and report on CAD data that is geographic in nature. Useful for GIS data creation, surveying, mapping, facilities management, infrastructure, landscape development, city planning or similar, workflows.
|
|
neurosis Mitglied dipl.ing.
 
 Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 03. Jun. 2012 19:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Madler
hallo madler, wenn ich das richtig sehe, baust du deine neue liste falsch auf Zitat: (entmod ;---...ändere Ihn mit endmod in den Wert 0 (list '(71 . 0) (assoc -1 (entget(entnext ent))) ) )
probier es mal so:
Code: (setq ed (entget ent) (entmod (subst '(71 .0) (assoc 71 ed) ed))
gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |