Buondì,Qualcuno avrebbe un esempio di come estrarre da un file dwg di autocad i dati estesi (xdata)?
ho provato a scrivere qualcosa ma senza risultati:
program ReadAutoCADXData;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, Variants, ComObj, ActiveX;
var
AutoCADApp: Variant;
Document: Variant;
ModelSpace: Variant;
Entity: Variant;
XData: Variant;
XDataItem: Variant;
i, j: Integer;
begin
CoInitialize(nil);
try
// Creazione di un'istanza dell'applicazione AutoCAD
AutoCADApp := CreateOleObject('AutoCAD.Application.22');
// Verifica che AutoCAD sia in esecuzione
if VarIsEmpty(AutoCADApp) then
begin
Writeln('AutoCAD non è in esecuzione.');
Exit;
end;
// Ottiene il documento attivo
Document := AutoCADApp.ActiveDocument;
// Verifica che ci sia un documento attivo
if VarIsEmpty(Document) then
begin
Writeln('Nessun documento attivo.');
Exit;
end;
// Ottiene il modello dello spazio carta
ModelSpace := Document.ModelSpace;
// Ciclo attraverso tutte le entità nello spazio modello
for i := 0 to ModelSpace.Count - 1 do
begin
Entity := ModelSpace.Item(i);
// Ottiene il set degli XData dell'entità
XData := Entity.XData;
// Verifica se ci sono XData
if not VarIsEmpty(XData) then
begin
// Stampa un'intestazione per l'entità corrente
Writeln('Entità ', i + 1, ':');
// Ciclo attraverso gli XData
for j := 0 to XData.Count - 1 do
begin
// Ottiene l'elemento XData corrente
XDataItem := XData.Item(j);
// Stampa dettagli su ogni XData
Writeln(' XData ', j + 1, ' - TypeCode: ', XDataItem.TypeCode);
// Verifica se il codice dell'XData è 1000
if XDataItem.TypeCode = 1000 then
begin
// Stampa il valore ASCII string dell'XData
Writeln(' Value (ASCII string): ', XDataItem.StringValue);
end;
end;
end
else
begin
// Se non ci sono XData, stampa un messaggio
Writeln('Entità ', i + 1, ': Nessun XData trovato.');
end;
// Aggiunge una riga vuota per separare le informazioni sulle entità
Writeln;
end;
finally
// Rilascia le risorse COM
CoUninitialize;
end;
end.