Assign Xdata For AlignedDimension
I am using AlignedDimension object of Autodesk.AutoCAD.DatabaseServices to create objects in autocad. I want to store some data in XData of Dimension object using TypedValue object. But when we assign the resultBuffer to XData it does not assign the value to XData . This works fine if the object is Entity But xData is not getting assigned for AlignedDimension object. Can you please help me assign typedValue to Xdata of AlignedDimension ? Below is the code snippet:
List xdata = new List(); xdata.Add(new TypedValue(872, "ACF")); DBObject object1= acTrans.GetObject(newDimension.ObjectId, OpenMode.ForWrite) as Dimension; ResultBuffer resBuffer = new ResultBuffer(xdata.ToArray()); object1.XData = resBuffer;
3,500 2 2 gold badges 20 20 silver badges 39 39 bronze badges
asked May 13, 2015 at 10:08
1 1 1 silver badge 2 2 bronze badges
1 Answer 1
To assign xData you’ll need to define a application (under RegAppTable) and use this as the first TypedValue on your list.
static void AddRegAppTableRecord(string regAppName) < Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; Transaction tr = doc.TransactionManager.StartTransaction(); using (tr) < RegAppTable rat = (RegAppTable)tr.GetObject( db.RegAppTableId, OpenMode.ForRead, false ); if (!rat.Has(regAppName)) < rat.UpgradeOpen(); RegAppTableRecord ratr = new RegAppTableRecord(); ratr.Name = regAppName; rat.Add(ratr); tr.AddNewlyCreatedDBObject(ratr, true); >tr.Commit(); > >
answered May 13, 2015 at 13:01
Augusto Goncalves Augusto Goncalves
8,503 2 2 gold badges 17 17 silver badges 44 44 bronze badges
- c#
- autocad
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
Question feed
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.11.15.1019
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
AutoCAD command XDATA
Complete list of all AutoCAD commands CZ/EN/DE/FR/IT/ES/PT/PL/RU/HU/JP
The XDATA command in the main language versions of AutoCAD:
In AutoCAD since version R14

Command category: operating

Help (2024): XDATA
Command not available in AutoCAD LT
Command not available in Core Console
XDATA command description:
Attaches extended object data (xdata) to a selected object (Express Tools)
You can run the XDATA command in any localized version of AutoCAD by typing _XDATA in the commandline.
Search XDATA on the Internet
XDATA command
XDATA příkaz
XDATEN Befehl
XDATA commande
DATOSEX comando
XDATI comando
comando
XDATA polecenie
XDATA команда
XDATA utasítás
XDATA のコマンド
English, Česky, Deutsch, Français, Español, Italiano, Português, Polski, По-русскы, Magyar, 日本の
XDATA command prompts and options:
"Select object:
Enter application name:
Enter an option [3Real/DIR/DISP/DIST/Hand/Int/LAyer/LOng/Pos/Real/SCale/STr/eXit] :"
Option list:
3Real • DIR • DISP • DIST • Hand • Int • LAyer • LOng • Pos • Real • SCale • STr • eXit •
option database by Michal Miclík, UPCE
Wait please, loading commands.
All commands:
— | + | ? | 3 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Z |
Overview of all 1562 AutoCAD commands — command history
(in English, Czech, German, French, Spanish, Italian, Portuguese, Polish, Russian, Hungarian, Japanese)
Subset — only ExpressTools and not in LT (only in full AutoCAD) and not in Core Console and only from SAP
See also the GetCName LISP interface. VisualLISP functions.
EN: English commands — CZ: České příkazy — DE: Deutsche Befehle — FR: Français commandes — ES: Español comandos — IT: Italiano comandi — PT: Português comandos — PL: Polskie polecenia — RU: Русскиe команды — HU: Magyar utasítás — JP: 日本の注文
Missing AutoCAD command? New or wrong translation of a command? Please contact us for a fix.
CAD Forum — tips, tricks, utilities, help, how-tos and FAQ for AutoCAD, LT, Inventor, Revit, Map, Civil 3D, Fusion 360, Forma, 3ds Max and other Autodesk software (support by Arkance Systems) — see About
Arkance Systems CZ s.r.o. (CAD Studio) — Autodesk Platinum Partner & Training Center & Consulting Services Partner
Что такое regapptable в autocad
Beitr�ge: 252
Registriert: 29.05.2008
Ich mache in meiner Zeichnung ein Purge, um am Ende alles sauber zu haben.
Aber es bleibt immer 1 Layer übrig, auf dem keien Elemente liegen.(In der Schnellauswahl, Layer ausgewählt, dann bestätigt er dass 0 Elemente auf dem Layer liegen)
Rufe ich das Purge manuell über Autocad auf funktioniert es.
Er Fragt mich ob ich den Layer bereinigen will, nach dem Bestätigen ist er weg.
Hier der Code wie ich es mache:
Es ist dann egal ob ich 5 oder 10 einstelle in der Schleife, der Layer bleibt da.
5 benötige ich aber um es so weit sauber zu bekommen.
Code:
Public Function PurgeAll()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim acaddoc As AcadDocument = Nothing
acaddoc = CType(doc.AcadDocument, AcadDocument)
For i = 0 To 5
acaddoc.PurgeAll()
Next
acaddoc = Nothing
End Function
folgenden Code habe ich in einem Beispiel gefunden, diese Verstehe ich aber nicht, was sie genau macht.
was steht in der RegAppTable ?
Code:
Public Sub PurgeCurrentDocument()
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As EditorInput.Editor = doc.EditorDim count As Integer = PurgeDatabase(db)
‘ ed.WriteMessage(vbLf & «Purged object from » & «the current database.», count, If(count = 1, «», «s»))
End Sub
Private Function PurgeDatabase(ByVal db As Database) As Integer
Dim idCount As Integer = 0
Dim tr As Transaction = db.TransactionManager.StartTransaction()
Using tr
‘ Create the list of objects to «purge»
Dim idsToPurge As New ObjectIdCollection()‘ Add all the Registered Application names
Dim rat As RegAppTable = DirectCast(tr.GetObject(db.RegAppTableId, OpenMode.ForRead), RegAppTable)For Each raId As ObjectId In rat
If raId.IsValid Then
idsToPurge.Add(raId)
End If
Next
‘ Call the Purge function to filter the list
db.Purge(idsToPurge)Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim ed As EditorInput.Editor = doc.Editor
‘ ed.WriteMessage(vbLf & «Registered applications being purged: «)
‘ Erase each of the objects we’ve been
‘ allowed to
For Each id As ObjectId In idsToPurge
Dim obj As DBObject = tr.GetObject(id, OpenMode.ForWrite)
‘ Let’s just add to me «debug» code
‘ to list the registered applications
‘ we’re erasing
Dim ratr As RegAppTableRecord = TryCast(obj, RegAppTableRecord)
If ratr IsNot Nothing Then
ed.WriteMessage(«»»»» «, ratr.Name)
End If
obj.[Erase]()
Next
‘ Return the number of objects erased
‘ (i.e. purged)
idCount = idsToPurge.Counttr.Commit()
End Using
Return idCount
End Function
Beitr�ge: 21533
Registriert: 03.06.2002
REGistrierte APPlikationen (nicht viel mehr wie ein reiner Texteintrag «ACAD» zB.)
Dieser dürfte nicht stören (wohl aber wenn der Layer in Dictionarys der Applikation gespeichert sind)
Eine Frage habe ich noch: Was ist es denn für ein Layer,
und Benutzerdefinierter oder ein Acad-System-Layer ?
erstellt am: 10. Feb. 2010 15:12
>> Ich mache in meiner Zeichnung ein Purge, um am Ende alles sauber zu haben.
>> Aber es bleibt immer 1 Layer übrig
Bitte Zeichnung, in der dieses reproduzierbar ist, sonst raten wir uns 70 Runden lang durch und nicht mal dann ist ein Erfolg sichergestellt.
>> auf dem keien Elemente liegen.(In der Schnellauswahl, Layer ausgewählt,
>> dann bestätigt er dass 0 Elemente auf dem Layer liegen)
Die Schnellauswahl zeigt nicht alles, z.B. Elemente in einer BlockDEFINITION (BlockTableRecord), die einen Layer verwenden, aber auch Bemassungsstil, . Layer können an vielen Stellen verwendet sein, nicht nur durch Elemente im Modellbereich/Papierbereich(e).
>> was steht in der RegAppTable
Schau mal unter XData, da wirst Du darauf treffen, dass (strukturiert arbeitende) Applikationen für jede EED-Application einen Eintrag in dieser RegAppTable machen.
Beitr�ge: 252
Registriert: 29.05.2008
Datei ist angehängt.
erstellt am: 10. Feb. 2010 20:24
wenn ich Deine Zeichnung mit Deinem ersten Code bearbeite (COM-basiertem .PurgeAll ), dann bleiben keine Layer über, welche ich dann über den händischen Befehl: _PURGE bereinigen könnte (Probiert mit AutoCAD 2010)
Welcher Layer wird Deiner Meinung nach nicht bereinigt und sollte aber zu bereinigen sein?
Beitr�ge: 252
Registriert: 29.05.2008
Habe einen Screen angehängt.
Ich konvertiere meine Zeichnung (Elemente umlegen auf andere Layer)
Am Ende starte ich dann die Funktion die ich gepostet habe.
Das Ergebnis ist wie im Screenshot.
erstellt am: 11. Feb. 2010 10:08
bleibt bei mir nicht über, wobei ich zugebe (geht auch grad nicht anders), dass ich das mit AutoCAD 2010 gemacht habe.
Zumindest kann ich damit mal bestätigen, dass Dein Code richtig geschrieben ist.
Offen bleibt: handelt es sich jetzt um eine Ungereimtheit von ‘ 2009 ‘ (statt 2010) oder liegt’s ev. an dem Umstand, dass bei Dir ‘ Mechanical ‘ als Applikation aktiv ist (statt purem AutoCAD).
Ich kenne von Civil, dass ich es ‘ als AutoCAD ‘ starten kann, also damit alle Civil-spezifischen Module nicht ins AutoCAD geladen werden und sich damit auch nicht in eigene Programmabläufe einmischen. Wenn es sowas auch mit Mechanical gibt, wäre das durchaus eine erfolgversprechende Variante.
Beitr�ge: 252
Registriert: 29.05.2008
Wenn ich es mit AutoCAD mache, ist der Layer weg.
erstellt am: 11. Feb. 2010 11:26
danke vorerst für die Rückmeldung, Rückschluss zu dem ganzen ist dann wohl, dass ein Mechanical-Modul sich den Layer krallt. Jetzt würde mir noch einfallen, dass Du es ev. mit SendCommand machst (es scheint ja, dass der Befehlsaufruf anderes bewirkt als die API-Funktion), schön ist das keinesfalls, aber wenn’s dann geht?
Da ich nix Mechanical bin (zumindest nicht mit dem Produkt), bin ich an dieser Stelle leider out.
Чтение произвольных аттрибутов (ХДата).
1.
При попытке прочитать объекты Акад выдается ошибка
Error ! Unable to cast object of type
‘Autodesk.AutoCAD.DatabaseServices.BlockTableRecord’ to type
‘Autodesk.AutoCAD.DatabaseServices.Entity’.
сорцы простые
.
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Database db = HostApplicationServices.WorkingDatabase;
Transaction trans = db.TransactionManager.StartTransaction();
try
BlockTable btr = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btrw = (BlockTableRecord)trans.GetObject(btr[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
foreach (ObjectId id in btr)
Entity entity = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
>
.
2. Не совсем понял как правильно прочитать ХДата.
Записать
ResultBuffer buffer = new ResultBuffer();
buffer.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName, StromAcadData.AUTOCAD));
foreach(string strAttribute in attributes)
buffer.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, strAttribute));
>
acadObject.XData = buffer;
Как их прочитать ? -)
RegAppTable XdTbl = (RegAppTable)_transaction.GetObject(_database.RegAppTableId, OpenMode.ForRead);
if (!XdTbl.Has(AUTOCAD))
acadObject.XData;
>
