Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Attributmapping zwischen 2 Blöcken

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:  Attributmapping zwischen 2 Blöcken (261 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 18. Jun. 2009 16:14    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!

Ich habe hier 2 Blöcke, einen alten und einen frisch eingefügten.
jetzt möchte ich gerne alle Attribute des alten auf die Attribute des neuen mappen.
Es sind alle Attribute im neuen Block vorhanden, nur deren Wert soll übertragen werden.

Jetzt weißich nicht so recht wie ich das vom Prinzip her angehen soll?
Ich habe die Id's der Blöcke, die Blockreferenzen, dass ist kein Problem...

Nur wie greife ich am schnellsten auf die beiden verschiedenen AttributeCollections zu?

mfg

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


Ex-Mitglied

erstellt am: 18. Jun. 2009 19:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Du musst durchscannen, hilft sonst nichts

symbolisch:

Code:
For each tObjID1 in FromBlockRef.AttributCollection
  tAttRef1 = (...hol mittels transaction und tObjID1 die AttributReferenz1)
  For each tObjID2 in ZielBlockRef.AttributCollection
      tAttRef2 = (...hol mittels transaction und tObjID2 die AttributReferenz2)
      if tAttRef1.TagString = tAttRef2.TagString then
        tAttRef2.TextString = tAttRef1.TextString

Natürlich kannst Du aus den ObjectID's der AttributeCollection vorher schon die AttributReferenzen holen und nicht jedes einzelne mal mittels TransAction öffnen und dann wieder schliessen, geht schneller.

Und noch ein Beisatz zu Performance und Zeichnungsstruktur: der obige Weg geht immer, dauert nur länger, lässt sich aber, wie schon im absatz zuvor erwähnt, auch ein wenig beschleunigen. Hast Du aber x-tausende BlockReferenzen und musst das machen, dann kann es ev. auch schneller gehen, wenn Du dich auf die Zeichnungsstruktur verlassen kannst, soll heissen:

Normalerweise ist die erste AttributReferenz des Blocks A auch im Block B als erstes zu finden (also wenn im ersten Block das erste Attribut 'ID' ist, dann ist es auch im zweiten Block so zu finden), davon könntest Du ausgehen, ABERes gibt Applikationen, die mit Attributen im Block recht sorglos umgehen, sodass es sein kann, dass die Reihenfolge der Attribte im Block rein gar nichts mehr mit seiner ursprünglichen Definition zu tun hat, also z.B. im Block1 ist das Attribut 'ID' das erste in der AttributCollection und in Block2 an 4.ter Position und vielleicht sogar in Block3 (obwohl gleiche Blockdefinition) überhaupt nicht enthalten.

Also sich auf die Reihenfolge zu verlassen kann deutlich beschleunigen, birgt aber auch eine Menge Risiken.

HTH, - alfred -


HTH, -alfred -
   

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 19. Jun. 2009 07:36    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

Geht es nicht z.b nur eine AttributCollection durchzulaufen und dann das Objekt zu holen.
Mittels dem Attributnamen, dann auf das Attribut in Collection 2 zuzugreifen.
Ist ja oft so, dass über den Index oder über den Key(Namen?) auf ein Element zugegriffen werden kann.

mfg

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


Ex-Mitglied

erstellt am: 19. Jun. 2009 07:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

a) über die Verwendung von Index habe ich, glaube ich, schon beschrieben, welche Gefahr sich dahinter verbirgt
b) nein, AttributeCollection haben keinen Key

- alfred -

------------------
www.hollaus.at

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