| | | 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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Jun. 2009 16:14 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 19. Jun. 2009 07:36 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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 >>)
|