Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  XRecord erstellen bzw. updaten

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:  XRecord erstellen bzw. updaten (1324 mal gelesen)
KevinK
Mitglied



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

Beiträge: 12
Registriert: 05.09.2012

erstellt am: 20. Nov. 2012 15:28    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 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




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 20. Nov. 2012 15:39    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 KevinK 10 Unities + Antwort hilfreich

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



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

Beiträge: 12
Registriert: 05.09.2012

erstellt am: 20. Nov. 2012 17:43    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

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 >>)

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