|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
[VB6] Creare un software che traccia delle linee(un piccolo cad)
Salve a tutti sono uno studente di ingegneria e mi e' stato chiesto di creare un software che permetta di far tracciare delle rette all'utente.
Questo software deve essere un piccolo cad ma nn mi interessa esportare in nessun formato proprietario. Potete darmi una dritta sul linguaggio + conveniente e su eventuali librerie free? Grazie
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Puoi farlo in qualsiasi linguaggio general-purpose (C#/Java/Delphi/C++/Python/...), ovviamente ti conviene scegliere quello che conosci meglio.
Per ogni linguaggio esistono delle librerie per lo sviluppo di applicazioni CAD-like, ma credo che lo scopo del progetto sia quello di sfruttare al più i framework del linguaggio prescelto. Altrimenti è troppo semplice... |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
effettivamente nn ho specificato, sono uno studente di ingegneria civile, quindi devo fare questo software il + semplicemente possibile!
Pensavo di farlo in Visual basic ma nn conosco le librerie + appropriate
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Specifica i requisiti dettagliati del progetto (=cosa deve fare) e non dimenticare di dire "perché"/"per chi" devi svilupparlo.
Esistono poche librerie open-source per VB6, un tempo fioriva un mercato di controlli commerciali per tale linguaggio. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Devo esattamente creare un software che calcola il centro di taglio di una sezione generica disegnata da ki usa il programma.
Per l'algoritmo che calcola il centro di taglio nn ho problemi, l'unico problema sta nel creare la grafica
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
L'unica è che tu ti studi come funzionano e come sono gestiti "i contesti grafici" (e come ci si disegna) nel linguaggio che sceglierai per realizzare il tuo progetto. Una curiosità: che tipo di entità geometriche devi gestire: solo linee o anche archi, cerchi, altri tipi di coniche? @EDIT: Devi anche dare la possibilità di salvare il file su cui si lavora? (sì, lo so, domanda stupida forse) In tale caso ti interessa riuscire a produrre un file dxf? (il formato file dxf R12 è uno standard diffuso per l'interscambio dati in ambiente tecnico CAD e CAM) Ultima modifica di banryu79 : 03-04-2008 alle 09:52. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Devo gestire inizialmente solo linee ma se poi riuscissi a implementare anche gli archi di circonferenza sarebbe interessante.
Ma quindi mi consigliate di utilizzare le system.drawing? nn esiste qualche libreria che mi possa agevolare il compito?
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Hai già tutto quello che ti serve, devi solo documentarti e usarlo.
In fin dei conti devi solo disegnare linee (e forse archi di cerchio, e non credo siano un problema). Prova a consultare queste risorse e a farti un'idea più precisa: -> guide introduttive alla programmazione grafica -> System.drawings -> Graphics: membri e metodi -> Classe Pen |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Sapresti consigliarmi anche un libro che tratta questo argomento?
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Purtroppo sono alle prime armi con la programmazione ad oggetti quindi anche se visual basic e' mooolto semplice mi sto trovando in difficoltà!
Attualmente il mio problema e' il seguente: Sto utilizzando le librerie System.Drawing e mi interessa creare una linea che si sposta quando si ridimensiona la finestra e che appaia quando si lancia il programma con questa Sub sono riuscito a far apparire la linea: Private Sub Panel1_Paint(ByVal sender As System.Object,ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint dim Asse As Graphics = e.Graphics Asse.DrawLine(Pens.Black,Me.Panel1.Location.X+20,Me.Size.Height-70,Me.Panel1.Location.X+70,Me.Size.Height-70) End Sub Solo che mi interessa che questa linea si possa spostare quando si ridimensiona la finestra. Sapete come posso gestire una linea che ho dichiarato all'inteno di una Sub?
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
-> Sistemi di coordinate e trasformazioni
Che tipo di esperienza di programmazione hai alle spalle? Scusa se te lo chiedo, ma se ci specifichi che linguaggio conosci (VB6 o VB.NET?), in che ambiente stai lavorando (presumo Visual Studio, ma quale versione?) eccetera, probabilmente rusciamo a darti consigli più pertinenti e appropriati. Nota che se parti da zero, non solo come ambito tecnologico (programmazione grafica) ma anche come ambiente (VB.NET 200X) allora non puoi improvvisare e buttarti subito a scrivere codice, devi mettere in preventivo un ragionevole lasso di tempo per acquisire le competenze che ti servono. Potresti cominciare a spiegare in dettaglio che conoscenze hai, e cosa devi fare (il software) |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Per quanto riguarda le mie competenze: sono un appassionato di programmazione ho iniziato a scuola a programmare in pascal,poi sono passato al flash,c++,visual basic ma sempre a livello amatoriale quindi so giochicchiare con un bel pò di linguaggi ma nn li conosco bene in particolare nn ho mai approfondito la programmazione ad oggetti anche se concettualmente l'ho capita.
Devo : (come avevo scritto prima) programmare un piccolissimo cad che deve tracciare delle linee per ottenere una figura geometrica. Tutto questo per poi scrivere un algoritmo che a partire dalla figura geometrica che l'utente ha disegnato calcoli in centro di taglio della sezione. L'algoritmo in questione nn mi sarà difficile da scrivere perchè rientra nelle mie competenze. Quindi il mio problema è solo la parte dell'interfaccia utente Spero che adesso il quadro sia + chiaro. grazie
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
mi intrometto per dire la mia (scusatemi ma ho dato una letta molto rapida al thread, potrei ripetere cose già dette
ho qui Visual Basic 2008 Express (mai usato ), l'ho aperto e ho creato un nuovo progetto; il wizard mi fa scegliere tra alcuni templates tra cui vedo "Windows Forms Application"; lo scelgo e l'hard disk parte a frullare, e dopo qualche secondo mi salta fuori un confortevole ambiente RAD per disegnare interfacce grafiche basate su Windows Forms. direi che la questione dell'interfaccia utente non è eccessivamente complessa |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Si infatti per questo ho deciso di utilizzare visual basic perchè e' molto semplice creare i form. Soltanto che dare la possibilità all'utente di disegnare un numero n di linee nn e' così semplice (almeno per le mie competenze)
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Mayor, prima devi "fare amicizia" con l'interfaccia a GDI+ per sapere come disegnare le tue entità, eseguire trasformazioni affini (se devi rototraslare e scalare il disegno: utile per implementare funzioni di zoom/zoom finestra, per esempio [se ti è noto AutoCAD sai di che parlo]) eccetera: ma per disegnarle, le tue entità prima devono essere istanziate e memorizzate...
Il che ci porta alla questione + complessa: - come farà il tuo utente a costruire le linee? (per ora supponiamo di dover gestire solo le linee). Prova a descivere come l'utente si interfaccia al cad per creare le sue entità geometriche, e vediamo che implicazioni saltano fuori Ah, domandina importante: Ma il tuo software deve permettere la creazione di qualsiasi forma [percorso chiuso] (basata su linee) o ti basta gestire solo un piccolo set di forme geometriche? Chiedo perchè in un caso [nel primo] hai proprio bisogno di un cad, cioè devi far disegnare all'utente le entità geometriche che definiscono la forma (percorso chiuso), viceversa nell'altro caso [il secondo] potresti evitare di far disegnare all'utente la forma geometrica: gli metti invece a disposizione una "libreria" di forme geometriche predefinite parametriche: l'utente si limita a dimensionare le varie entità della forma, senza la necessità di tracciarle. Non so se ho spiegato in modo chiaro la cosa. |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Feb 2003
Messaggi: 242
|
Sisi 6 stato chiarissimo!
L'operatore deve disegnare un generico percorso chiuso e per farlo pensavo di creare (sempre se ci riesco) un comando tipo polilinea (se hai presente autocad penso che hai capito
__________________
-------------------------------- P4 3.0 Ghz - Asus P4P800 Deluxe - 2x256 Mb di RAM DDR 400 - Sapphire Radeon 9800 PRO 128 Mb- Saegate 7200.7 SATA 120 GB |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Allora proviamo a immaginare uno scenario di partenza da fissare come possibile obbiettivo:
1 - creare un'applicazione dotata di un'unica finestra; 2 - dentro la finestra si sfrutterà tutto lo spazio client della stessa per la definizione delle entità geometriche (solo linee) e la loro rappresentazione grafica; Ci sono tante cose da stabilire: * che convenzione utilizzerai per rappresentare il tuo modello di piano cartesiano nell'applicazione? Il piano cartesiano canonico ha l'asse delle ascisse che si estende con verso positivo verso destra, e l'asse delle ordinate che si estende con verso positivo verso l'alto; ma nei contesti grafici delle finestre in cui devi poi disegnare le tue entità, il punto di origine è l'angolo in alto a sinistra, l'asse delle ascisse si estende con verso positivo verso destra mentre quello delle ordinate si estende con verso positivo verso il basso. Quindi mentre a livello di "modello" potresti rappresentare le tue entità con coordinate basate sulle convenzioni del piano cartesiano "canonico", poi a livello di rappresentazione grafica (disegno nella finestra) e cattura degli eventi del mouse (click con i tasti, trascinamento, rilascio ecc... che dovrai gestire se vuoi permettere all'utente di tracciare le entità con appunto il mouse) dovrai rimappare le coordinate per disegnarle dove ti aspetti. Altre trasformazioni delle coordinate avverranno per la funzione di zoom: sarà infatti praticamente necessario mettere a disposizione dell'utente questa funzionalità perchè egli sia in grado tracciare le forme che preferisce in modo agevole (sarai ovviamente tu poi a valutare e decidere) *come rappresenterai le tue entita-linea nell'applicazione? Possiamo definire una linea in diversi modi, ad esempio tramite due punti [segmento] oppure anche come due valori double, uno per il coefficente angolare (m) e l'altro per l'intercetta (q) [retta]. Potrebbe essere ragionevole partire definendo un entità-geometrica Punto (due double: x e y), definire poi un'entità-geometrica Linea (composta da due entità Punto) magari dotata di metodi che sappiano calcolare e restituirci il suo coefficente angolare e la sua intercetta (se queste informazioni ti tornano utili nell'applicazione). Ma pensare di partire a progettare la tua applicazione e realizzarla senza prima avere le conoscenze tecniche necessarie a implementare queste funzionalità è assurdo. Tanto per elencarne alcune che ti serviranno: - programmazione OOP per strutturare i tuoi oggetti e le relazioni tra loro nella tua applicazione; - conoscenza della sintassi e delle meccaniche (almeno quelle di base) del linguaggio VB.NET (e nota che essendo OOP la cosa qui va di pari passo col punto precedente) - conoscenza degli oggetti e dell'ambiente che VB.NET, tramite appunto il framework .NET, mette a disposizione per la grafica, tra cui: - sistema di coordinate - trasformazioni affini e almeno le due principali trasformazioni di Scale e Translate (lasciando stare lo Shear) - System.Drawing e la superfice di disegno GDI+ rappresentata da Graphics. Come vedi ci sono vari campi di conoscenza di cui appropriarsi prima di cimentarsi nello stendere l'implementazione del tuo programma. Dato che, se non ho capito male, non sei completamente a digiuno di programmazione, la cosa sarebbe anche fattibile con tanto impegno e il ragionevole lasso di tempo (di cui sopra in un mio post precedente) per acquisire queste competenze, in particolare il discorso sull'OOP e Graphics. Ciao Ultima modifica di banryu79 : 04-04-2008 alle 14:27. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Non è facile creare un "piccolo" CAD partendo da zero, bisogna tenere in considerazione un numero notevole di problematiche...
Se ti interessa prendere spunto, puoi partire da progetti(ni) tipo Open-S CAD. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
|
sì ma non è che può usare come "model" una bitmap.
bisogna prima modelllizzare gli oggetti... classe astratta Forma con ad esempio coordinate x,y classe Linea che estende Forma.. classe Curva ecc. ognuna con le sue proprietà.. L'applicazione gestirà in pratica una List<Forma> e refresha la bitmap in base al modello... non è che potete disegnare direttamente senza tener traccia da nessuna parte del modello dei dati. Poi eviterei assolutamente almeno inizialmente di gestire l'inserimento della forme iin modo "grafico". mettere delle semplici form dove posso inserire forme dando le loro coordinate x,y, e altri parametri, lunghezze diametro ecc. in base al tipo di forma.. e un click sul bottone carica nel model questi dati.. e poi magari una lista con ttute le forme attualmente definite con la possibilità di cancellarle dal model.
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. Ultima modifica di dupa : 04-04-2008 alle 16:33. |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Anzi, forse è proprio meglio partire con un cosa del genere, per poter poi verificare se l'implementazione di quel che si è fatto è corretta, dove va riveduta/modificata ecc... Poi si valuta se implementare (e come) un interfaccia con l'utente via eventi del mouse anche per la definzione delle entità. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:08.












), l'ho aperto e ho creato un nuovo progetto; il wizard mi fa scegliere tra alcuni templates tra cui vedo "Windows Forms Application"; lo scelgo e l'hard disk parte a frullare, e dopo qualche secondo mi salta fuori un confortevole ambiente RAD per disegnare interfacce grafiche basate su Windows Forms. direi che la questione dell'interfaccia utente non è eccessivamente complessa







