Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attribut zurückspiegeln GC 71

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
  
PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Attribut zurückspiegeln GC 71 (1038 mal gelesen)
Madler
Mitglied
Technischer Zeichner


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

Beiträge: 30
Registriert: 13.07.2011

AutoCAD 2010
Autodesk MEP 2012

erstellt am: 03. Jun. 2012 14:57    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


Attributblock.dwg

 
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.


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

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 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 Madler 10 Unities + Antwort hilfreich

Ohne das jetzt probiert zu haben - nach entmod wirkt oft entupd Wunder.

Die Skalierfaktoren sind alle positiv?

------------------
Schöne Grüße
Ernst

www.geopaint.at

[Diese Nachricht wurde von Geos am 03. Jun. 2012 editiert.]

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

Madler
Mitglied
Technischer Zeichner


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

Beiträge: 30
Registriert: 13.07.2011

AutoCAD 2010
Autodesk MEP 2012

erstellt am: 03. Jun. 2012 17:51    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

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 224
Registriert: 22.08.2006

erstellt am: 03. Jun. 2012 19: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 Madler 10 Unities + Antwort hilfreich

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

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)2024 CAD.de | Impressum | Datenschutz