Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

di il
12 risposte

Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

Vorrei realizzare, in c#, un programma che sostanzialmente riesca a leggere dei file dxf e delle nuvole di punti e riesca a rappresentarli, anche solo in wireframe, in 3d con le varie operazioni di zoom e spostamento punto di vista

Inoltre, alcuni di questi dxf dovrebbero essere 'incernierati' uno sull'altro e potersi muovere (venir cancellati e ridisegnati) in funzione di alcuni valori passati in real-time

Fai conto di vedere un aereo, con carrello estraibile, flap movibili, coda movibile, tutti e 4 forniti come file dxf separati ed incernierati uno sull'altro

I parametri passati saranno la posizione dell'aereo (un punto con coordintate x,y,z), la sua direzione (in gradi A/B/C rispetto ad un riferimento stabilito), l'inclinazione flap (in gradi rispetto alla posizione di riposo), l'inclinazione piano di coda (in gradi rispetto alla posizione di riposo), l'apertura del carrello (in percentuale rispetto alla posizione completamente rientrata) 

Una specie di videogioco dove l'aereo (insieme di 4 dxf) si muove su un terreno fornito come nuvola di punti e vengono visualizzate anche delle costruzioni tipo edifici o altro di regolare come dxf (insieme di triangoli)

Ovviamente si muove seguendo i parametri passati in real-time al programma (porta seriale, server tcp, mqtt o comunicazione similare)

Vedo che esistono diverse librerie per la lettura dei dxf ma non mi e' ben chiaro quale possa essere la piu' efficace in questo caso

L'unico vero problema lo vedo nell'incernieramento dei vari componenti l'aereo, nel senso che il piano di coda deve essere disegnato sia in posizione conforme alla posizione dell'aereo, sia con l'inclinazione passata dai parametri che arrivano di seguto uno dopo l'altro via il canale comunicazione che poi vedremo quel che sara', in prima istanza usero' degli slider per simulare i vari valori passati, per il momento mi concentro sulla visualizzazione 

Quali letture, consigli, esempi, potete indicare per aiutarmi ad arrivare a realizzare quanto descritto sopra?

12 Risposte

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Non conosco quel formato file, o meglio è un CAD se non erro. Comunque c'è questa libreria Nuget https://www.nuget.org/packages/netDXF che dovrebbe fare al caso tuo.

    Facci sapere come risolvi.

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Il format DXF e' un formato per immagini vettoriali di Adobe.

    https://it.wikipedia.org/wiki/AutoCAD_DXF

    Ora, quello che vorresti realizzare e' un "visualizzatore" di oggetti vettoriali 3D.

    Diciamo che non e' una cosa alla portata di un "programmatore della domenica", nel senso che serve

    1. saper programmare abbastanza bene in C/C++ ma anche C#, visto la richiesta
    2. conoscere come funziona la grafica 3D in modo abbastanza buono, perche' bisogna saper come usare le matrici di trasformazione (e sapere che cosa e' una matrice di trasformazione) e generare la matriche di trasformazione che proietta un oggetto 3D su un piano 2D
    3. utile, anche se non strettamente necessario per un'implementazione minimale, saper implementare l'algortmo del pittore o gli algoritmi di rimozione delle linee nascoste
    4. saper prendere in mano una delle varie librerie 3D a disposizione, come ad esempio OpenGL, Vulkan, ecc, ed usarla in modo proficuo, o i wrapper per C#

    .

    Sia chiaro, NON E' impossibile, NON E' DIFFICILE, MA certamente non e' una cosa che metti in piedi in 10 minuti/un ora/un giorno.
    C'e' del lavoro da fare: competenze da acquisire, concetti da comprendere, PRIMA di mettersi a pasticciare sui tasti :-)

    .

    https://en.wikipedia.org/wiki/List_of_3D_graphics_libraries

    Ovviamente, anche la lettura del file DXF, implementata da 0, si puo' fare, ma non e' proprio banalissimo. 

    Diciamo che "forse" ti conviene partire da qualcosa piu' "pratico".

    Prova a vedere Blender, che e' un CAD 3D, opensource con il 95% delle funzionalita' che ti servono gia' "pre-implementate" che puo' essere anche programmato in Python.

    https://www.blender.org/

    Per STUDIARE i concetti fondamentali di Computer Grafica, questi sono due "superclassici":

    1. Computer Graphics Principles and Practice, 3rd - 2014 Addison Wesley
    2. Mathematical Structures for Computer Graphics - 2015 Wiley

    .

    NB: ci sono alternative, ovviamente, dal Vibe Coding a n-milioni di altri libi sull'argomento, dipende se vuoi "solo fare" o "imparare a fare"

    NB/2: ci sono anche altre alternative: usare tool che supportano GIA la visualizzazione 3D, ed in questo caso devi SOLO generare il modello 3D.
    Mathematica, Matlab, Maple, Maxima, ... e piu' in generale un qualunque "ragionevole" CAS ("Computer Algebra System"). Ma qui andiamo sul "fantascientifico" :-)

    NB/3: ci sono anche gli "engine 3D" che si potrebbero prendere in considerazione, come Unity, Stride, Godot, Urho3D, ... Lumberyard, ...

    Per quanto riguarda la realizzazione di modelli 3D "vincolati", buona fortuna :-)

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Non sò aiutarti, solo qualche pensiero ad alta voce. Purtroppo non progetto applicazioni simili.
    Secondo me (e in linea con @migliorabile) potresti partire con motori di svilupo di giochi, dove però ti trovi chiaramente una grossa parte già sviluppata.

    OpenCV potrebbe essere un punto di partenza per le parti grafiche: consente di importare dxf e usarli come degli oggetti su cui puoi applicare tutta la matematica che vuoi. Inoltre ha diversi riferimenti ed integrazioni com motori di rendering completi (texture, shader, material, scene, interactive scene, etc ...). C'è una documentazione biblica (poi ci sono i riferimenti a terze parti che ti possono essere utili).

    Questo è il link: https://opencv.org/

    Auguri per il tuo progetto.

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    OpenCV: no
    OpenCV e' una libreria per "computer vision" con implementazione di diversi algoritmi per "image processing" (elaborazione di immagini). 
    Non centra nulla con il renreding 3D.

    Puo' convertire un'immagine "vettoriale" in un'immagine "raster", 
    MA il suo scopo PRIMARIO e' processare immagini "raster", cioe' fatte di "pixel".
    Nota: un stream video e' trattato come una sequenza di immagini (i "frame" del video)

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    @migliorabile,

    io non uso OpenCV (uso Halcon di MvTEC che costa un botto, che potrebbe essere definito l'equivaente a pagamento di OpenCV) ma nel passato ho usato appunto Halcon insieme a CAD VCL (non riporto link per non violare le policy del forum, ma con una googolata riuscirete a trovare il prodotto) in Delphi per gestire oggetti disegnati in CAD.

    E la libreria di "image processing" mi è servita per effettuare tutta una serie di elaborazioni sui vari blocchi CAD, non propriamente pertinenti all'image processing.

    Il mio suggerimento era appunto un ... suggerimento "di percorso", non una soluzione totale.

    Comunque il progetto che porta avanti @amorosik è importante in termini di risorse (conoscenza , tempi, attività) e gli serviranno più suggerimenti possibili.

    P.S.: inoltre l'OP ha accennato alla nuvola di punti ... oggetto tipico di processo di una libreria di imaging.

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    @Delphinium, suggerimenti si, MA pertinenti.

    Inoltre, per uno che e' alle prime armi, meglio non dare TROPPI suggerimenti, perche' poi diventa dispersivo e non sa piu' che cosa usare.
    Pochi suggerimenti e MIRATI.

    Gia' ne ho dati troppi io :-) (si lo so!)

    Poi, a mano a mano che prende "dimestichezza", puo' cercare soluzioni alternative per conto suo. Ma a quel punto SA cosa cercare.

    Visto che ci mastico abbastanza entrambi i settori (ed il dentista si lamenta :-)):UNA COSA e' la computer visione ed' un'altra e' la computer grafica/modellazione 3D.

    Lo sappiamo entrambi che poi alla fin fine il rendering viene fatto su uno schermo "raster", MA i tipi di "sorgenti" sono TOTALMENTE diversi:

    1. da una parte hai dei pixel su un piano (o 3,4 piani se usi i colori, ed anche qui ci si puo' sbizzarire perche' dipende dallo spazio colore O se non andiamo nel mondo "multispettrale", che non e' quello dei "fantasmi" :-))
    2. dall'altra hai un oggetto fatto di punti, linee, poligoni, superfici, volumi, ...

    .

    CAD VCL e' EFFETTIVAMENTE una libreria per la manipolazione di oggeti 3D ed ha il supporto per la lettura del file DXF.
    Poi, quello che avrai fatto, suppongo, e' il rendering su un'immagine che poi hai ulteriormente processato con la seconda libreria.
    Ok, ci sta'.

    Oppure avrai usato la libreria per generare la versione VETTORIALE dell'immagine, ma 2D, non certamente 3D, 
    visto che e' solo recentemete che sono stati realizzate reti neurali in grado di convertire un'immagine in 3D.

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    04/03/2026 - migliorabile ha scritto:

    Oppure avrai usato la libreria per generare la versione VETTORIALE dell'immagine, ma 2D, non certamente 3D, 
    visto che e' solo recentemete che sono stati realizzate reti neurali in grado di convertire un'immagine in 3D.

    No, non ho fatto quello. Ho fatto altro, ma sono sotto NDA e non posso più di tanto parlare.

    Comunque la trasformazione in oggetto (ad esempio un 3D più o meno complesso) di una immagine rilevata da CAD (e questo è ovvio) o da una nuvola di punti o da altro è possibile da una vita, almeno da una dozzina d'anni.

    Per oggetto intendo un qualsiasi "formato" che consenta di essere manipolato a livello software, ad esempio che possa avere delle dimensioni e una forma specifica (ancora non siamo riusciti a creare un teletrasporto però).

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    03/03/2026 - lele2006 ha scritto:

    Non conosco quel formato file, o meglio è un CAD se non erro. Comunque c'è questa libreria Nuget https://www.nuget.org/packages/netDXF che dovrebbe fare al caso tuo.

    Facci sapere come risolvi.

    Grazie, appena possibile do' un'occhiata

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    03/03/2026 - migliorabile ha scritto:

    Il format DXF e' un formato per immagini vettoriali di Adobe.

    https://it.wikipedia.org/wiki/AutoCAD_DXF

    Si,  forse volevi scrivere Autocad

    Prova a vedere Blender, che e' un CAD 3D, opensource con il 95% delle funzionalita' che ti servono gia' "pre-implementate" che puo' essere anche programmato in Python.

    https://www.blender.org/

    A meno che non si possa usare solamente come motore grafico, Blender non e' quello che mi serve

    Conosco ed apprezzo le innumerevoli funzionalita', ma quel che desidero realizzare e' un progetto con interfaccia utente proprietaria, ed attualmente le funzionalita' di visualizzazione mi sono gia' sufficienti, e quindi tutta la parte di creazione/modifica/eliminazione primitive non e' tra le richieste attuali

    NB/3: ci sono anche gli "engine 3D" che si potrebbero prendere in considerazione, come Unity, Stride, Godot, Urho3D, ... Lumberyard, ...

    Si anche quesrti stavo valutando in particolare per Unity mi sembra che si possa utilizzare/comandare da codice proprietario ed alcuni esempi per il c# sono gia' disponibili, e quindi questo e' un sistema tra quelli papabili (in realta' e' anche troppo come funzionalita')

    Per quanto riguarda la realizzazione di modelli 3D "vincolati", buona fortuna :-)

    Dici sia una rogna di buon livello?  Ehhh d'altra parte se e' questo quel che serve, questo sara'

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    04/03/2026 - Delphinium ha scritto:

    @migliorabile,

    io non uso OpenCV (uso Halcon di MvTEC che costa un botto, che potrebbe essere definito l'equivaente a pagamento di OpenCV) ma nel passato ho usato appunto Halcon insieme a CAD VCL (non riporto link per non violare le policy del forum, ma con una googolata riuscirete a trovare il prodotto) in Delphi per gestire oggetti disegnati in CAD.

    E la libreria di "image processing" mi è servita per effettuare tutta una serie di elaborazioni sui vari blocchi CAD, non propriamente pertinenti all'image processing.

    Il mio suggerimento era appunto un ... suggerimento "di percorso", non una soluzione totale.

    Comunque il progetto che porta avanti @amorosik è importante in termini di risorse (conoscenza , tempi, attività) e gli serviranno più suggerimenti possibili.

    P.S.: inoltre l'OP ha accennato alla nuvola di punti ... oggetto tipico di processo di una libreria di imaging.

    OpenCV sicuramente no per quel che vorrei fare io, mentre CAD VCL  (o CAD .NET) nel mio caso sembra proprio l'ideale

    Vedo che hanno prezzi a richiesta, spannometricamente e' roba da 200 euro? 1000?  5000?

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    04/03/2026 - migliorabile ha scritto:


    Pochi suggerimenti e MIRATI.

    Gia' ne ho dati troppi io :-) (si lo so!)

    Eh si, ma deciditi pero'  

    O pochi e mirati o tanti e sparpagliati   

    :)

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    11/03/2026 - amorosik ha scritto:

    Vedo che hanno prezzi a richiesta, spannometricamente e' roba da 200 euro? 1000?  5000?

    Non ne ho proprio idea. A quel tempo, il pacchetto (come anche l'IDE Delphi) apparteneva all'azienda per cui ho sviluppato l'applicativo. Io sviluppai appunto per il cliente e gli vendetti il runtime di Halcon.

Devi accedere o registrarti per scrivere nel forum
12 risposte