Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: alexarmato66 - Febbraio 25, 2022, 09:51:09 am

Titolo: Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 25, 2022, 09:51:09 am
Dovrei caricare delle coordinate X e Y da un file DXF (TXT)  in una StringGrid.
All'interno del file le coordinate si ripetono iniziando con la stringa VERTEX
Es:

VERTEX
  8
0
10
 9.2299999999999997E+001   // coordinata X
20
 8.5000000000000000E+000   // coordinata Y
30
0.00
0
VERTEX
  8
0
10
-5.2000000000000000E+001
20
 0.0000000000000000E+000
30
0.00
0
SEQEND
  0

La procedura dovrebbe fermarsi quando incontra la stringa SEQEND

Qualncuno può fornirmi un'esempio
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 25, 2022, 10:51:04 am
Questo come base, poi sistemala tu con errori (record malformati) oppure usa un classe al posto del record:

Codice: [Seleziona]
//Definizione del record VERTEX
type TVertex = record
   Dummy1: integer;
   Dummy2: integer;
   Dummy3: integer;
   X: double;
   Dummy4: integer;
   Y: double;
   Dummy5: integer;
   Dummy6: double;
   Dummy7: integer;
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    fVertici: array of TVertex;
  public
    { Public declarations }
    function Carica(const NomeFile: string): boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

//Funzione per il caricamento dei dati
function TForm1.Carica(const NomeFile: string): boolean;
var tempFile: TEXTFILE;
    valore: string;
begin
  Result := false;
  try
    if Fileexists(NomeFile) then
      begin
        //File da aprire
        AssignFile(tempfile, NomeFile);
        //Sola lettura
        Reset(tempfile);
        //finchè non siamo a fine file
        while not eof(tempfile) do
          begin
            //leggi una riga
            readln(tempfile, valore);
            //Se abbiao terminato esci dal loop
            if UPPERCase(Trim(valore)) = 'SEQEND' then
              break;
            //Iniziamo la procedura per la lettura dei vertici
            if UPPERCase(Trim(valore)) = 'VERTEX' then
              begin
                //Incrementa di 1 la dimensione dell'array
                setlength(fVertici, length(fVertici)+1);
                //Inserisci nell'ultima posizione appena "aggiunta"
                with fVertici[length(fVertici)-1] do
                  begin
                    readln(tempfile, Dummy1);
                    readln(tempfile, Dummy2);
                    readln(tempfile, Dummy3);
                    readln(tempfile, X);            // !!!!!!!!!!!!! ATTENZIONE AL FORMATO DEL DECIMALE (punto o virgola)
                    readln(tempfile, Dummy4);
                    readln(tempfile, Y);            // !!!!!!!!!!!!! ATTENZIONE AL FORMATO DEL DECIMALE (punto o virgola)
                    readln(tempfile, Dummy5);
                    readln(tempfile, Dummy6);
                    readln(tempfile, Dummy7);
                  end;
              end;
           end;
        Result := True;
        CloseFile(tempfile);
      end;
  except on e: exception do
    begin
      Result := false;
      CloseFile(tempfile);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Carica('prova.txt');
  //Qua ha il tuo array dei vertici, inserire nella griglia non dovrebbe essere un problema.
end;

end.

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 25, 2022, 11:32:07 am
Io avrei usato una TStringList.
Sono delle schegge a caricare i file di testo.
Poi si utilizza il puntatore a carattere per fare un miniparser.


Si tratta di riconoscere test e valori numerici, per lo scanner del testo/generatore di tocken.
Non serve nemmeno farsi un albero AST.


Ma è una questione di gusti.


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 25, 2022, 11:57:53 am
Si, si poteva fare anche con una TStringList, ma nel modo proposto ci si trova gia l'array dei vertici bello pronto nel suo formato nativo.

Io, tendenzialmente uso lo TStringList se ho un input ben definito tipo un CSV o simile e sò perfettamente cosa stò leggendo. Nel caso specifico il file è un DXF, quindi cosa ci si trova non è del tutto noto. Ed effettuare lo TStringList solo per la parte "VERTEX", bhè non penso ci sia un guadagno che bilanci poi l'extra elaborazione da fare.

Sono d'accordo che poi è una questione di gusti, di stile e di esperienza sopratutto. Io tendenzialmente se dovessi leggere file DXF frequentemente cercherei di farmi una classe.

Ciao ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 25, 2022, 12:28:07 pm
Eh, magari c'è pure in lettore di DXF già bello e pronto.


Sarebbe da vedere nella libreria fpvectorial.


E' tra i formati supportati.


https://wiki.lazarus.freepascal.org/fpvectorial (https://wiki.lazarus.freepascal.org/fpvectorial)


 ;)


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 25, 2022, 02:08:36 pm
Non penso voglia entrare nell'argomento DXF direttamente, parlare di formati cad (tra cui DXF) è alquanto complesso. Ritengo voglia esporre solo alcuni dati del file (per computi metrici ?).

Tieni presente che i vari formati sono stati dall'89 in poi in evoluzione continua e non c'è ne uno compatibile all'altro (dxf v95 e dxf v2000 sono diversi). Lo stesso pregiatissimo Autocad (copyright del leggittimo proprietario) ha negli anni avuto qualche gabola con la compatibilità.

Adottare un programma di lettura vettoriale potrebbe portare ad una serie di problematiche che forse il ns. utente potrebbe non volr affrontare.

Comunque pubblicità e cultura vanno sempre bene. Proverò il componente indicato per vedere come si comporta con i vari formati e le varie versioni.

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 25, 2022, 03:06:24 pm
GRAZIE !!! Era quello che cercavo di fare  DragoRosso.
Se poi volessi modificare il codice dando un inizio di lettura (POLIGONO1) come dovrei fare?
Es:

POLIGONO1
VERTEX
  8
0
10
 9.2
20
 8.5
30
0.00
0
VERTEX
  8
0
10
-5.2
20
 0.25
30
0.00
0
SEQEND
  0
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 25, 2022, 04:36:39 pm
Non chiedermi anche le mesh ....  ;)
.....
Codice: [Seleziona]
type TVertex = record
   Dummy1: integer;
   Dummy2: integer;
   Dummy3: integer;
   X: double;
   Dummy4: integer;
   Y: double;
   Dummy5: integer;
   Dummy6: double;
   Dummy7: integer;
end;

type TPoligono = array of TVertex;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    //fVertici: TPoligono;
    //Rcoolta di vertici (eg POLIGONI)
    fFiguraComplessa: array of TPoligono;
  public
    { Public declarations }
    function Carica(const NomeFile: string): boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}


function TForm1.Carica(const NomeFile: string): boolean;
var tempFile: TEXTFILE;
    valore: string;
    tempindice: integer;
begin
  Result := false;
  SetLength(fFiguraComplessa, 1);
  SetLength(fFiguraComplessa[0], 0);
  try
    if Fileexists(NomeFile) then
      begin
        AssignFile(tempfile, NomeFile);
        Reset(tempfile);
        while not eof(tempfile) do
          begin
            readln(tempfile, valore);
            if UPPERCase(Trim(valore)) = 'SEQEND' then
              break;
            //se leggo "POLIGONOxxxxx" senza aver trovato almeno un vertice allora non incremento la struttura
            if (Pos('POLIGONO', UPPERCase(Trim(valore))) > 0) and (Length(fFiguraComplessa[0]) > 0) then
              begin
                setlength(fFiguraComplessa, length(fFiguraComplessa)+1);
                setlength(fFiguraComplessa[length(fFiguraComplessa)-1], 0);
              end;
            if UPPERCase(Trim(valore)) = 'VERTEX' then
              begin
                setlength(fFiguraComplessa[length(fFiguraComplessa)-1], length(fFiguraComplessa[length(fFiguraComplessa)-1])+1);
                //per semplicità .....
                tempindice := length(fFiguraComplessa[length(fFiguraComplessa)-1])-1;
                with fFiguraComplessa[length(fFiguraComplessa)-1][tempindice] do
                  begin
                    readln(tempfile, Dummy1);
                    readln(tempfile, Dummy2);
                    readln(tempfile, Dummy3);
                    readln(tempfile, X);
                    readln(tempfile, Dummy4);
                    readln(tempfile, Y);
                    readln(tempfile, Dummy5);
                    readln(tempfile, Dummy6);
                    readln(tempfile, Dummy7);
                  end;
              end;
           end;
        Result := True;
      end;
  except on e: exception do
    begin
      Result := false;
      CloseFile(tempfile);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Carica('prova.txt');
end;

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 25, 2022, 04:40:27 pm
 :) GRAZIE!!!
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 25, 2022, 04:42:13 pm
Eh, magari c'è pure in lettore di DXF già bello e pronto.
Sarebbe da vedere nella libreria fpvectorial.
E' tra i formati supportati.
https://wiki.lazarus.freepascal.org/fpvectorial (https://wiki.lazarus.freepascal.org/fpvectorial)
 ;)
Stilgar

Provato, ma non sono riuscito a leggere nemmeno un dei file DXF che ho .... compreso un DXF che dovrebbe provenire da un autocad LT2000 (dovrebbe ma non ne ho la certezza).

Il file viene letto ma sembra che non riconosca i vertici (tutti a zero ?), non ci ho perso più di tanto tempo. Quando avrò un pò più di tempo approfondirò

EDIT: file di esempio, non è quello LT ...

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Febbraio 26, 2022, 02:24:25 pm
@ alexarmato66

Scommetto che è un "aggiornamento" del tuo programma VCAP.... ;D
Stai forse cercando il modo di fargli importare direttamente la sezione da un file DXF?
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 11:01:24 am
Alex.
Domanda, cosa rappresentano le singole righe?


VERTEX <-Tipo?
  8 <-Lunghezza blocco?
0 <-??
10 <- Tipo dato successivo?
 9.2299999999999997E+001   // coordinata X <-Valore
20 <- Tipo dato successivo?
 8.5000000000000000E+000   // coordinata Y <-Valore
30 <- Tipo dato successivo?
0.00 <-Valore
0<- Fine Blocco?


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Febbraio 28, 2022, 11:36:14 am
@ Stilgar

Se vedi qui è spiegato abbastanza bene https://digilander.libero.it/carlopala/vb/dxf.htm (https://digilander.libero.it/carlopala/vb/dxf.htm); certo che il sito di Autodesk http://docs.autodesk.com/ACD/2014/ITA/index.html?url=files/GUID-D939EA11-0CEC-4636-91A8-756640A031D3.htm,topicNumber=d30e530297 (http://docs.autodesk.com/ACD/2014/ITA/index.html?url=files/GUID-D939EA11-0CEC-4636-91A8-756640A031D3.htm,topicNumber=d30e530297) è più completo.
Il problema dei file DXF (scambio di informazioni tra i diversi programmi di grafica vettoriale), anche se sono dei semplici file di testo, è che negli anni ne sono usciti una marea di tipi diversi.
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 11:37:05 am
Ti aggiorno io per quello che sò (riferimento: http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-79c8.htm (http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-79c8.htm))

VERTEX <- (testo)
  8 <- (non noto)
0 <-(non noto)
10 <- (tipo integer, dato successivo punto X in OCS o WCS)
 9.2299999999999997E+001   <- coordinata X FLOAT
20 <- (tipo integer, dato successivo puntoY in OCS o WCS)
 8.5000000000000000E+000   <- coordinata Y FLOAT
30  <- (tipo integer, dato successivo punto Z in OCS o WCS)
0.00   <- coordinata Z FLOAT
0<- (non noto)

Un riferimento per un pacchetto free è in python https://ezdxf.readthedocs.io/en/stable/index.html (https://ezdxf.readthedocs.io/en/stable/index.html), io uso CADVCL in Pascal (a pagamento) che mi legge tutto ccompresi STEP, DWG, STL, .... etc ....

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Febbraio 28, 2022, 11:42:29 am
@ DragoRosso

Il codice di gruppo 8 definisce il Layer sul quale dovrà essere collocato il segmento.
Purtroppo....DXF che usi, impostazioni che trovi!!!  ;D
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 12:01:37 pm
Doc.


https://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-0741E831-599E-4CBF-91E1-8ADBCFD6556D


Stavo guardando qui, ci si arriva via wikipedia (io almeno ci sono arrivato da lì)


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 12:21:48 pm
@ DragoRosso

Il codice di gruppo 8 definisce il Layer sul quale dovrà essere collocato il segmento.
Purtroppo....DXF che usi, impostazioni che trovi!!!  ;D

Eh eh eh, siccome a suo tempo ho fatto un programma CAD / CAM diretto, quando ancora non esistevano (nel 1986), tutto ciò che non è essenziale lo tralascio (dicitura non noto), perchè quei dati nel tempo hanno preso varie strade....

 ;D ;D ;D
Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 12:31:50 pm
Mi state dicendo che come standard è tanto al chilo? ???


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 12:36:28 pm
Mi state dicendo che come standard è tanto al chilo? ???
Stilgar

Non è uno standard inteso come tale, è standard di AutoDesk ...... loro lo hanno creato, definito e lo mantengono a loro piacimento.

In genere è sufficientemente "standard" se non ti addentri troppo nei dettagli. E' di fatto una traduzione povera del "dwg".

Se volete avere quakche idea su tutti gli "standard" noti, andate qui ...... e buon divertimento: https://www.loc.gov/preservation/digital/formats/fdd/browse_list.shtml (https://www.loc.gov/preservation/digital/formats/fdd/browse_list.shtml)

Io quando devo verificare qualcosa parto da qui.

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 12:52:02 pm
L'idea era imbastire un piccolo prototipo da cui alexarmato66 avrebbe potuto partire e modificare a suo piacimento/necessità.
[/size]Ma se lo standard non standard è una cosa caotica e non stabile, diventa difficile pensare a qualche cosa di "stabile" e funzionante.
[/size]
[/size]Stavo pensando ad un parserino semplice semplice con la filosofia SAX con una piccola macchina a stati per gestire le cosine che escono dal lexer...
[/size]Ma se non si sa cosa si sta leggendo ... siamo messi benino.
[/size]
[/size]Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Febbraio 28, 2022, 01:34:38 pm
Purtroppo io ho trovato (chissà dove è finito quell'eseguibile realizzato in GwBasic su un pc Olivetti  :'(), anni addietro, quando avevo la necessità di caricare i dati di una certa geometria da un file dxf per importarli in un mesher 2d, una sola soluzione: ho creato un lettore/importatore di DXF della versione 2000 di AutoCAD. Quando avevo dxf o dwg di versioni diverse, in genere antecedenti, gli aprivo con AutoCAD 2000 e con lui salvavo il dxf nel formato 2000; così ha sempre funzionato tutto bene. Poi cambiarono le versioni del dxf ed allora ho perso la speranza di aggiornare il tutto.
DragoRosso ha ragione, essendo stato creato dalla Autodesk, non è uno standard definito in tutto e per tutto, è una sorta di standard definito nei conceti base ma che poi si evolve, muta, al cambiare delle versioni rilasciate dalla stessa Autodesk.
Purtroppo è così, a meno che quancuno non abbia voglia (come succede con i programmi a pagamento di calcolo strutturale) di creare un importer in grado di "autoadattarsi" alla versione del dxf/dwg che deve "digerire".
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 01:46:07 pm
Diciamo che l'auto adattamento è solo il riconoscere la versione del file ad applicare un algoritmo diverso per versione.
Basta avere le idee chiare, non solo sulla versione n ma anche sulla versione n-1.
Così si legge sia una versione che l'altra.


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 28, 2022, 02:40:04 pm
A me basterebbe scivere il codice per il riconoscimento delle coordinate di una polilinea (VERTEX)  nel formato
Autocad12. Il codice di Drago Rosso va bene ma visto i miei limiti nella programmazione non riesco ancora ad utilizzarlo.Speriamo bene :)
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 02:45:40 pm
I DXF esportati da Autocad e derivati di AutoDesk hanno un identificatore che numera la versione specifica e quindi si potrebbe pensare di versionare il lettore di dxf.

Il problema è di tutti i derivati che non hanno questo ma usano una versione X che però poi bisogna vedere quanto sono ad X aderenti (la versione X non è esplicitata  :o )

Ho visto per diversi anni disegni di vario genere (per lavoro) e alla fin fine mi sono convinto che il file originale in STEP, DWG, etc .... è imparagonabile rispetto ad un dxf.

Il pacchetto che uso io, ha oltre 50000 righe di codice Pascal, solo per il DXF senza contare le classi basi......

Non penso sia un lavoro approcciabile, a meno che non abbiate tanto, ma tanto tempo libero ....

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 02:53:56 pm
A me basterebbe scivere il codice per il riconoscimento delle coordinate di una polilinea (VERTEX)  nel formato
Autocad12. Il codice di Drago Rosso va bene ma visto i miei limiti nella programmazione non riesco ancora ad utilizzarlo.Speriamo bene :)

Se ci dici cosa vuoi fare, magari ti possiamo aiutare. Il codice che ti ho postato legge in generale delle "sezioni" di dxf, andando a costruire degli array di vertici per formare diverse polilinee.

Ogni indice dell'array FormaComplessa corrisponde ad una polilinea e i suoi valori sono le coordinate dei vertici.

Ma non funziona sempre e solo così. Ci sono anche altre rappresentazioni e dati riguardanti una polilinea (ad esempio ampiezza) .....

Cosa devi fare di quei dati ? Devi usarli in calcoli ? Devi "disegnarli" su una superficie grafica ?

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 28, 2022, 03:19:10 pm
Mi basterebbe caricare le coordinate per ogni poligono (max 4) all'interno delle rispettive Stringgrid(anche una per volta).
Stessa cosa per le barre e per i trefoli.
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 03:40:01 pm
EDIT: PER LEGGERE I VERTICI DAL FILE DXF CHE HAI POSTATO NON VA' BENE IL CODICE CHE IO TI HO POSTATO. CI SONO DA LEGGERE ANCHE LE ALTRE INTESTAZIONI ..... VEDO UN ATTIMO DI SISTEMARTI LA COSA ....

Se cicli all'interno dell'array:

Codice: [Seleziona]
var poligonoN: integer;
     VerticeXX: integer;
begin
  for poligonoN := Low(FormaComplessa) to High(FormaComplessa)
    begin
        //In questo punto "parte" un Poligono nuovo"
        for VerticeXX := Low(FormaComplessa[poligonoN]) to High(FormaComplessa[poligonoN])
          begin
              //Qui cicli all'interno dei elenco dei Vertici
              Grid1.Cell[VerticeXX,1] := FormaComplessa[poligonoN][VerticeXX].X;
              Grid1.Cell[VerticeXX,2] := FormaComplessa[poligonoN][VerticeXX].Y;
          end;
    end;
end;

Più o meno .... Ad ogni poligono nuovo, devi ovviamente disegnare su una griglia diversa ... basta mettere un "case of" ...
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 03:47:34 pm
Sapevo che mi faceva fare anche le mesh ....  ;D ;D ;D ;D ;D ;D ;D
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 04:10:00 pm
Ok, come facciamo a distinguere i vari "settori" ?

Dai LAYER ?

Questo è quello che si legge (vedi allegati).

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Febbraio 28, 2022, 04:34:35 pm
Giusto per buttare giù qualcosa, ti preparo un "lettore" che già divide i dati compatibili con le 6 tabelle possibili che hai.

Userò i LAYER per identificare suddividere i dati.

In questo modo avrai i tuoi dati già strutturati per importarli nella griglia.

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 28, 2022, 04:48:50 pm
Fantastico,i layer vanno benissimo.
 :)
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Febbraio 28, 2022, 05:01:17 pm
le polinee si riferiscono ai 4 poligoni.Vanno benissimo identificare i settori con i 4 layer nell'esempio ci sono solo 3 (Poligono_1,Poligono_2,Poligono_3,Poligono_4)
Grazie
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Febbraio 28, 2022, 08:37:31 pm
@ alexarmato66

Ero sicuro che era per il tuo VCAP..... :D
A pensare che all'inizio lo proponevi come un "clone" di quello del Prof. Gelfi. Secondo me questo tuo progetto è diventato qualcosa di moooolto interessante. Aspetto con ansia la prox versione, anche per pubblicarla.
Ciao.
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: Stilgar - Febbraio 28, 2022, 08:55:56 pm
VCAP?
Ora son curioso.
Qualche link pubblico?


Stilgar
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Marzo 01, 2022, 02:04:07 am
Ecco il progetto completo ...

Hai una classe TReadDXF (che devi creare e distruggere), e la funzione Carica(nomefile).

Vedi sull'evento del pulsante, è spiegato più o meno tutto.
Il resto del codice non è molto commentato ....

Se vuoi cambiare i nomi delle sezioni lo puoi fare anche a runtime, però ricordati di passarli in MAIUSCOLO (sarebbe meglio che il WRITE delle rispettive proprietà cfosse una funzione che converte in maiuscolo il dato passato invece che riportarlo direttamente nella variabile).

La classe "smista" correttamente le proprietà di BARRE e TREFORI, ma si aspetta che in un POLIGONO (POLYLINE) ci siano solo i dati di uno stesso layer.

N.B.: NON SO' SE RIESCI AD APRIRE IL PROGETTO... L'HO FATTO CON L'ULTIMA VERSIONE STABILE...COMUNQUE VEDI IL FILE UNIT1.PAS

Ciao
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Marzo 01, 2022, 10:19:50 am
DragoRosso non so come ringraziarti!!!! :)
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: doc - Marzo 01, 2022, 09:17:48 pm
@ Stilgar

Se vuoi vedere VCAP.... http://www.ing-mirko-spagnotto.com/collaboratori.htm (http://www.ing-mirko-spagnotto.com/collaboratori.htm)
Ho concesso questo spazio al nostro amico alexarmato66 perchè penso che il suo progetto/programma sia qualcosa che merita molto, ed io ci credo.
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Marzo 02, 2022, 06:05:15 pm
Ho provato a modificare il codice gentilmente concesso da DragoRosso ma devo aver commesso qualche errore.
Nell'importazione del dxf  le coordinate delle polilinee non vanno nelle rispettive StringGrid.Nellesempio allegato il poligono n°3 va nella StrngGrid 4. A parte questo mio errore il codice di DragoRosso è una bomba!!!!
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Marzo 02, 2022, 06:30:36 pm
Non è allineata la griglia ai dati perchè nel dxf ci sono diverse polilinee (non ho un cad a portata di mano per vedere dove sono).

Le polilinee che non hanno un nome tra i quattro definiti nel programma generano degli array vuoti.

Per verificare quale array è "operativo", testa la proprietà:

Codice: [Seleziona]
   ReadDXF.Poligoni[x][0].NomeLayer    <-- Ritorna il nome del layer (ad esempio "POLIGONO_1") se appartiene ad uno dei quattro, altrimenti ritorna un '' (cioè vuoto)

[x] è l'indice dell'array da testare,  -------> ( Low(ReadDXF.Poligoni) <= x <= High(ReadDXF.Poligoni)
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Marzo 02, 2022, 06:45:41 pm
forse il mio errore sta nel fatto che ho interpretato il POLIGONO_1 come ReadDXF.Poligoni[1]?
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: DragoRosso - Marzo 02, 2022, 07:16:15 pm
Vedi il progetto ...

Ciao

EDIT: Progetto che sorta i poligoni
Titolo: Re:Lettura file di testo - STRINGGRID
Inserito da: alexarmato66 - Marzo 05, 2022, 07:29:51 pm
Grazie DragoRosso!!!!! :) Il tuo codice mi sarà molto utile.Sei veramente bravo!!!