| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: XRecord erstellen bzw. updaten (1324 mal gelesen)
|
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 20. Nov. 2012 15:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, mit folgendem Codeausschnitt möchte ich entweder den XRecord neu erstellen, oder falls das Extension Dictionary bereits besteht einen neuen Eintrag hinzufügen. Wenn ich die Funktion nun zweimal ausführe, wird beim zweiten Mal der erste Eintrag gelöscht. Hab ich da einen Denkfehler? Code:
DBDictionary xdict = (DBDictionary)tr.GetObject(dictId, OpenMode.ForRead); Xrecord xrec;if (xdict.Contains(key) && IsUpdate) { ed.WriteMessage("öffnen"); xrec = (Xrecord)tr.GetObject((ObjectId)xdict[key], OpenMode.ForWrite); } else { ed.WriteMessage("erstellen"); xdict.UpgradeOpen(); xrec = new Xrecord(); xdict.SetAt(key, xrec); tr.AddNewlyCreatedDBObject(xrec, true); } xrec.Data = new ResultBuffer(values);
Meine zweite Frage wäre bezüglich TypedValue: mit
Code:
new TypedValue((int)MyEntityEnums.Name, "63")
erstelle ich einen TypedValue mit eigenen Enums. Welche TypeCodes darf ich verwenden?Vielen Dank. Kevin [Diese Nachricht wurde von KevinK am 20. Nov. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 20. Nov. 2012 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für KevinK
Zitat: Original erstellt von KevinK: ... Wenn ich die Funktion nun zweimal ausführe, wird beim zweiten Mal der erste Eintrag gelöscht. Hab ich da einen Denkfehler?
Seoweit ich das Sehe kannst du immer nur komplette XDatas anhängen. Das heißt, Auslesen was existiert - dort den neuen Eintrag anhängen - XDatas von Objekt löschen - XDatas )komplett neu anhängen.
Zitat: Original erstellt von KevinK: ... erstelle ich einen TypedValue mit eigenen Enums. Welche TypeCodes darf ich verwenden?
Schau mal in die Entwicklerhilfe, da sind die zulässigen Gruppencodes gelistet: -3(Registered application name) 1001 1000, 1002-1071 Welchen Typ welcher Gruppencode darstellt, findest du in der DXF-Referenz. Ziehe einfach von den 10XX 1000 ab. 1001 -> 1 -> String Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 20. Nov. 2012 17:43 <-- editieren / zitieren --> Unities abgeben:
Schade, dann habe ich das jetzt so gelöst: Code:
if (xdict.Contains(key) && IsUpdate) { ed.WriteMessage("xrec öffnen"); xrec = (Xrecord)tr.GetObject((ObjectId)xdict[key], OpenMode.ForWrite); ResultBuffer resBuffOld = xrec.Data; TypedValue[] valuesOld = resBuffOld.AsArray(); ResultBuffer resBuffNew = new ResultBuffer(values); int ineu = 0; int ialt = 0; int jneu = values.Count(); int jalt = valuesOld.Count(); while(ineu < jneu) { while(ialt < jalt) { if(values[ineu].TypeCode != valuesOld[ialt].TypeCode) { resBuffNew.Add(valuesOld[ialt]); } ialt++; } ineu++; } xrec.Data = resBuffNew; } // Ansonsten neuer XRecord else { ed.WriteMessage("xrec erstellen"); xdict.UpgradeOpen(); xrec = new Xrecord(); xdict.SetAt(key, xrec); tr.AddNewlyCreatedDBObject(xrec, true); ResultBuffer resBuff = new ResultBuffer(values); xrec.Data = resBuff; }
Verbesserungsvorschläge? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|