Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Το link που σου έδωσα σε προηγούμενο ποστ (http://onecore.net/howtocreate-standalone-executable-for-matlab-file.htm) το δοκίμασες; Φαντάζει ιδανική λύση για την περίπτωσή σου.

 

Το link που σου έδωσα σε προηγούμενο ποστ (http://onecore.net/h...matlab-file.htm) το δοκίμασες; Φαντάζει ιδανική λύση για την περίπτωσή σου.

 

Άκυρο, προϋποθέτει ύπαρξη του Matlab compiler.

  • Απαντ. 54
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Δημοσ.

Το link που σου έδωσα σε προηγούμενο ποστ (http://onecore.net/howtocreate-standalone-executable-for-matlab-file.htm) το δοκίμασες; Φαντάζει ιδανική λύση για την περίπτωσή σου.

 

Δεν έχω δοκιμάσει τίποτα ακόμα γιατί είχα τόσες πολλές εναλλακτικές που μπερδευόμουν!

Έχω εγκαταστήσει το Qt creator έχω κατεβάσει tutorials για όλα τα πιθανά έχω αποθηκεύσει όλα όσα μου προτείνετε και δεν έχω τρέξει τίποτα ακόμα :mrgreen: και έχω 200 tab ανοιχτά για διάβασμα!

Κι εγώ έτσι πίστευα για το MATLAB,ότι είναι ότι ιδανικότερο ή ακόμα και το octave (που δεν το ξέρω)που μου προτείνατε!

θα τρέξω στο Matlab κάτι απλό για να δω αν λειτουργεί αυτό που μου έστειλες και έιδωμεν!

Δημοσ.

Μήπως ξέρεις αν το GNU OCTAVE μπορεί να εξυπηρετήσει σε αυτο που θέλω;

 

Μήπως ξέρεις αν το GNU OCTAVE μπορεί να εξυπηρετήσει σε αυτο που θέλω;

To ψιλοgoolgara και μάλλον μπορώ αλλά αν ξέρεις κάτι παραπάνω..

Δημοσ.

Για να παρεις μια γευση το πως ειναι ενα τετοιο πραμα σε c++/winapi

>	case WM_PAINT:
	{
	hdc = BeginPaint(hWnd, &ps);
	// TODO: Add any drawing code here...
	
	//ena tetragwno etsi gia na blepoyme tis perioxes
	Rectangle(hdc,0,0,600,600);
	//to kartaisiano
	MoveToEx(hdc,300,0,NULL); //aksonas y
	LineTo(hdc,300,600);
	MoveToEx(hdc,0,300,NULL);//aksonas x
	LineTo(hdc,600,300);

	HGDIOBJ hOld = SelectObject(
		hdc,
		CreatePen(PS_SOLID,2,RGB(255,0,0)));

	std::vector<POINT> points;
	POINT p;
	
	for(float pi = (3.14*2.0f)* -1.0f ; pi < 3.14f * 2.f; pi += 0.1f)
	{
		//f(x) = cos(x)
		float x = pi;
		float y = cos(x);
		
		//reverse top y -> -y
		y *= -1.0f;


		//scale [-2π,2π] -> [-300,300]
		float f = 300.0f / (2.f * 3.14f);
		x *= f;
		y *= f;

		//transpose top left x,y = 0 -> top-left x,y = 600/2
		x += 600.0f /2.0f;
		y += 600.0f /2.0f;

		//convert
		p.x = (long) x;
		p.y = (long) y;
		points.push_back(p);
	}
	//draw

	Polyline(hdc,points.data(),points.size());
	DeleteObject(
		SelectObject(hdc,hOld));
	EndPaint(hWnd, &ps);
	}
	break;

 

 

viola

post-216584-0-01928100-1324477055_thumb.png

 

Δημοσ.

Συμπληρώνοντας το ποστ του παπι, για να πάρεις μια ιδεά από GUI programming με GTK+2, ο παρακάτω κώδικας σε C είναι ολοκληρωμένο πρόγραμμα που δημιουργεί ένα παράθυρο, σετάρει τις διαστάσεις του, το κεντράρει στην οθόνη, φορτώνει ένα εικονίδιο ως application-icon (εμφανίζεται στην πάνω αριστερή γωνία, καθώς και στο taskbar, κι εμφανίζει μέσα στο παράθυρο έναν μετρητή που αυξομειώνεται επιλέγοντας τα αντίστοιχα κουμπιά με το ποντίκι...

 

>
#include <gtk/gtk.h>

typedef struct MyCounter {
GtkWidget *frame;
GtkWidget *butplus, *butminus;
GtkWidget *label;
gint	count;
} MyCounter;

/* ----------------------------------------------------------------------------------
* GdkPixbuf *new_pixbuf( const gchar *fname )
*
* 	Create a pixelbuffer, load into it the image stored in fname and return the buffer.
* ----------------------------------------------------------------------------------
*/
GdkPixbuf *new_pixbuf( const gchar *fname )
{
GdkPixbuf *pixbuf;
GError *error = NULL;

pixbuf = gdk_pixbuf_new_from_file( fname, &error );
if ( !pixbuf ) {
	fprintf( stderr, "%s\n", error->message );
	g_error_free( error );
}

return pixbuf;
}

/* ----------------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------------
*/
void cb_increase( GtkWidget *widget, MyCounter *counter )
{
char buf[ 5+1 ] = {'\0'};

(counter->count)++;

sprintf( buf, "%d", counter->count );
gtk_label_set_text( GTK_LABEL(counter->label), buf );

return;
}

/* ----------------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------------
*/
void cb_decrease( GtkWidget *widget, MyCounter *counter )
{
char buf[ 5+1 ] = {'\0'};

(counter->count)--;

sprintf( buf, "%d", counter->count );
gtk_label_set_text( GTK_LABEL(counter->label), buf );

return;
}

/* ----------------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------------
*/
void init_counter_widgets( MyCounter *counter, const GtkWidget *container )
{
/* add the counter's frame widget */
counter->frame = gtk_frame_new(" Μετρητής ");
gtk_widget_set_size_request( counter->frame, 120, 80 );
gtk_fixed_put( GTK_FIXED( container ), counter->frame, 10, 10 );

/* add the counter's plus-button widget */
counter->butplus = gtk_button_new_with_label( "+" );
gtk_widget_set_size_request( counter->butplus, 30, 17 );
gtk_fixed_put( GTK_FIXED( container ), counter->butplus, 20, 40 );

/* add the counter's minus-button widget */
counter->butminus = gtk_button_new_with_label( "-" );
gtk_widget_set_size_request( counter->butminus, 30, 17 );
gtk_fixed_put( GTK_FIXED( container ), counter->butminus, 20, 60 );

/* add the counter's text-label widget */
counter->label = gtk_label_new("0");
gtk_fixed_put( GTK_FIXED( container ), counter->label, 90, 46 ); 

return;
}

/* ----------------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------------
*/
int main( int argc, char *argv[] )
{
GtkWidget *window	= NULL;				/* our main-window widget*/
GtkWidget *container	= NULL;				/* for child widgets 	*/
MyCounter counter 	= {NULL, NULL, NULL, NULL, 0};	/* widgets + count   	*/

gtk_init(&argc, &argv);					/* init the gtk+ api 	*/

/* create the main window */
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );		/* with default settings */

/* change the window settings */
gtk_window_set_title( GTK_WINDOW(window), "Δοκιμή" );
gtk_window_set_default_size(				/* set the client area	*/
	GTK_WINDOW(window), 640, 400 );
gtk_window_set_position(				/* center the window  	*/
	GTK_WINDOW(window), GTK_WIN_POS_CENTER );
gtk_window_set_icon(					/* add an application icon*/
	GTK_WINDOW(window), new_pixbuf("appicon1_128.png") );

/* add a global container widget */
container = gtk_fixed_new();
gtk_container_add( GTK_CONTAINER( window ), container );

/* init & add my counter's widgets into the container */
init_counter_widgets( &counter, container );

/* display the main windows with all its children */
gtk_widget_show_all( window );

/* connect gtk+ signals to callback functions */
g_signal_connect( counter.butplus,  "clicked", G_CALLBACK( cb_increase ), &counter );
g_signal_connect( counter.butminus, "clicked", G_CALLBACK( cb_decrease ), &counter );
g_signal_connect( window, "destroy", G_CALLBACK( gtk_main_quit ), NULL );

/* start the main loop */
gtk_main();

return 0;
}

 

Και το αποτέλεσμα...

 

post-38307-0-35432900-1324494143_thumb.jpg

Δημοσ.

Η άποψή μου είναι ότι η αφετηρία για την όλη δουλειά είναι λάθος και

περίμενα οι μάχιμοι και έμπειροι να το επισημάνουν.

 

Πρώτα πρέπει να γραφεί το υπολογιστικό κομμάτι που αποτελεί το κύριο μέρος του προγράμματος.

Η αρχική προσπάθεια πρέπει να είναι πώς θα γραφεί όσο το δυνατόν πλήρως και ανεξάρτητο από τα γραφικά.

(Σημαντικό είναι πώς και ποιά δεδομένα θα χρησιμοποιηθούν στη διασύνδεση.)

Η γραφική φορεσιά έρχεται μετά, το είπα και νωρίτερα.

Ακόμα κι αν υπάρξουν δυσκολίες με το στήσιμο των γραφικών,

τουλάχιστον το υπολογιστικό μέρος θα έχει γίνει εξασφαλίζοντας έτσι ότι η δουλειά έχει προχωρήσει.

Εδώ συζητείται μόνον το περιτύλιγμα δίχως να υπάρχει το περιεχόμενο,

δίχως να έχει καν αποσαφηνιστεί το υπολογιστικό τμήμα της εφαρμογής.

 

Eξάλλου, τα frameworks για GUI υποδηλώνουν σαφώς αυτόν τον διαχωρισμό,

π.χ. στο MFC υπάρχει το doc/view, στην Qt το model/view κλπ.

 

Ο καθένας δουλεύει όπως νομίζει βέβαια αλλά...

 

-

Δημοσ.

Συγγνώμη που άργησα να απαντήσω,ήμουν εκτός!

Μίλησα με την σχολή μου και μάλλον δεν υπάρχει το MATLAB COMPILER...

Περιμένω να μου το σιγουρέψουν..

Σας ευχαριστώ πολύ για τους κώδικες!!ψιλοπιάνω το νόημα!!

Θα ξεκινήσω με C++ Qt creator και οτιδήποτε library χρειαστώ στην πορεία!

Και πάλι ευχαριστώ για τον χρόνο σας!!

 

Πρώτα πρέπει να γραφεί το υπολογιστικό κομμάτι που αποτελεί το κύριο μέρος του προγράμματος.

Η αρχική προσπάθεια πρέπει να είναι πώς θα γραφεί όσο το δυνατόν πλήρως και ανεξάρτητο από τα γραφικά.

(Σημαντικό είναι πώς και ποιά δεδομένα θα χρησιμοποιηθούν στη διασύνδεση.)

Η γραφική φορεσιά έρχεται μετά, το είπα και νωρίτερα.

 

Σε αυτό που λες συμφωνώ απόλυτα και θα ξεκινήσω έτσι.

Απλά ήθελα να έχω στο μυαλό μου και το τι έπεται σε προγραμματισμό για το GUI μέρος

και να δω αν μπορώ να συνεχίσω πάνω σε αυτό!!

Δημοσ.

Εννοείται πως η αφετηρία είναι το υπολογιστικό κομμάτι. Αμφιβάλλω όμως αν ο φίλος tzouperman έχει την προγραμματιστική ευχέρεια/εμπεριία να το αυτονομήσει από το user-interface. Ειδικά όταν το ui είναι gui, η αυτονόμηση είναι ακόμα πιο δύσκολη και κινδυνεύει να χάσει πολύτιμο χρόνο προσπαθώντας (πιθανώς να μην το καταφέρει κιόλας).

Δημοσ.

Είχα ξεχάσει πως στο site του Glade (το αντίστοιχο των resource editors στα Windows και του QT Designer στο QT, αλλά για GTK+ ) έχει link προς ένα λεπτομερέστατο tutorial που φτιάχνει μια εφαρμογή πολύ παραπλήσια με αυτό που θέλει να κάνει ο φίλος μας, με το παρακάτω layout...

 

post-38307-0-79552400-1324544710_thumb.png

 

Είναι ιδανικό για όσους θέλουν να μάθουν το Glade3, αλλά προϋποθέτει επίγνωση του OO τρόπου που λειτουργεί το GTK+ (ή έστω κάποιο από τα άλλα GUI API's). Χρησιμοποιεί επίσης παλαιότερη έκδοση και του GTK+ και του Glade (είναι γραμμένο το 2009), αλλά είναι πραγματικά εξαιρετικό tutorial. Στο τέλος δίνει και όλον τον πηγαίο κώδικα της εφαρμογής, αφού πρώτα έχει εξηγήσει τα αποσπάσματα που χρειάζονται εξήγηση.

 

Ο φίλος tzpouperman μπορεί να πάρει μια ιδέα του γιατί του έγραψα στην αρχή πως για κάποιον που ουσιαστικά δεν έχει προγραμματιστικές γνώσεις, το GUI programming δεν είναι τετριμμένη διαδικασία. RAD tools σαν το Glade, το QT-Designer και το αντίστοιχο των Windows που δεν θυμάμαι πως λέγεται, αφαιρούν σημαντική δουλειά που αλλιώς έπρεπε να γίνει με κώδικα (όπως στο παράδειγμα που έγραψα στο προηγούμενο ποστ, όπου τα widgets τα προσέθετα χειροκίνητα). Παραμένει όμως σημαντικό όχι μόνο να γνωρίζει πολύ καλά τη γλώσσα στην οποία προγραμματίζει, αλλά να είναι και εξοικειωμένος με τη φιλοσοφία και τον βασικό κορμό του GUI που χρησιμοποιεί.

 

Ο Ιούνιος φαντάζει μακρινός, αλλά μπορεί να αποδειχτεί ότι δεν είναι και τόσο, γιατί ουσιαστικά καλείται να μάθει και γλώσσα και GUI API. Η αυτονόμηση του υπολογιστικού κομματιού από το ui είναι επιπρόσθετη επιπλοκή, για την οποία ειλικρινά πιστεύω δεν πρέπει να τον απασχολεί στην παρούσα φάση, επειδή έχει τόσα πολλά να μάθει που προηγούνται.

 

Υπό αυτό το πρίσμα διατηρώ και κάποιες αμφιβολίες για το αν τελικά πρέπει να χρησιμοποιήσει γλώσσες όπως είναι η C++ και η C... Python, Java και C# ίσως είναι καλύτερες επιλογές. Όπως και να έχει, νομίζω πως πρέπει να ψαχτεί και να αγοράσει κάποιο καλό βιβλίο, ή μάλλον βιβλία... τουλάχιστον ένα για τη γλώσσα που θα επιλέξει κι άλλο ένα για το GUI. Δυστυχώς εγώ δεν έχω να του προτείνω κάποια (ξέρω ελάχιστα από τα καινούρια, ενώ αυτά από τα οποία έμαθα εγώ είναι... παλαιολιθικά :lol:).

 

Το link του Glade3 tutorial που αναφέρω παραπάνω είναι αυτό: http://tadeboro.blog...troduction.html (σε 6 μέρη) για όποιον ενδιαφέρεται, ενώ η παρακάτω εικόνα δίνει μια ιδέα για το περιβάλλον εργασίας του...

 

post-38307-0-62752800-1324546764_thumb.png

 

Τα Glade1 και Glade2 παρήγαγαν προαιρετικά απευθείας κώδικα σε C, κάτι που έχει αφαιρεθεί συνειδητά από το Glade3. Πλέον το UI που σχεδιάζει κανείς με το Glade3 αποθηκεύεται σε αρχείο XML το οποίο το διαβάζει/διαχειρίζεται στα προγράμματά του με χρήση του Gtk+Builder object (σε παλαιότερες εκδόσεις του GTK+ υπήρχε ξεχωριστή βιβλιοθήκη για το διάβασμα/διαχείριση των XML resource files που παρήγαγε το Glade, η LibGlade ή οποία υποστηρίζεται ακόμα, αλλά είναι depreciated... έχει και διαφορετικό φορμά από το φορμά που καταλαβαίνει ο Gtk+Builder)

 

Και κάτι τελευταίο για τα Windows binaries του Glade, ΑΠΟΦΥΓΕΤΕ τους installers (μερικοί ενσωματώνουν και το GTK+) γιατί υπάρχει BUG που ΣΒΗΝΕΙ το PATH του current user των Windows, και βάζει μονάχα τον φάκελο του Glade. Αν μάλιστα το κάνετε Uninstal τότε σβήνει και την ίδια την μεταβλητή περιβάλλοντος PATH (ευτυχώς δεν πειράζει το system PATH).

 

Προτιμήστε το αυτόνομο bundle που δεν έχει installer, το ξεζιπάρετε σε όποιον φάκελο θέλετε και κατόπιν απλά τρέχετε το .\bin\glade3.exe. Η τελευταία έκδοση για Windows είναι η 3.8.1 (κλικ για κατέβασμα του αυτόνομου bundle) που χρησιμοποιεί το GTK+ 2.24.8 (κλικ για κατέβασμα του all-in-one bundle για win32).

 

Το Glade 3.10 που εκμεταλλεύεται το GTK+3 δεν έχει ακόμα Windows bianaries, όπως δεν έχει και το GTK+3. Επίσης, για Win64 το τελευταίο GTK+2 all-in-one bundle είναι το 2.22.xx το οποίο όμως έχει προβλήματα. Αν θέλετε ντε και σώνει win64 binaries, προτιμήστε το all-in-one bundle 2.16.xx: http://www.gtk.org/download/win64.php

 

Προσωπικά χρησιμοποιώ την έκδοση 2.24.8 και σε win32 και σε win64.

 

ΥΓ. Εδώ άλλο ένα καλό tutorial για Glade3 με οδηγίες για ενσωμάτωση του UI σε προγράμματα γραμμένα είτε με C είτε με Python, εδώ το de-facto C++ interface για GTK+: gtkmm (αν και για C++ το QT είναι η native επιλογή).

Δημοσ.

Η άποψή μου είναι ότι η αφετηρία για την όλη δουλειά είναι λάθος και

περίμενα οι μάχιμοι και έμπειροι να το επισημάνουν.

 

Πρώτα πρέπει να γραφεί το υπολογιστικό κομμάτι που αποτελεί το κύριο μέρος του προγράμματος.

Η αρχική προσπάθεια πρέπει να είναι πώς θα γραφεί όσο το δυνατόν πλήρως και ανεξάρτητο από τα γραφικά.

(Σημαντικό είναι πώς και ποιά δεδομένα θα χρησιμοποιηθούν στη διασύνδεση.)

Η γραφική φορεσιά έρχεται μετά, το είπα και νωρίτερα.

Ακόμα κι αν υπάρξουν δυσκολίες με το στήσιμο των γραφικών,

τουλάχιστον το υπολογιστικό μέρος θα έχει γίνει εξασφαλίζοντας έτσι ότι η δουλειά έχει προχωρήσει.

Εδώ συζητείται μόνον το περιτύλιγμα δίχως να υπάρχει το περιεχόμενο,

δίχως να έχει καν αποσαφηνιστεί το υπολογιστικό τμήμα της εφαρμογής.

 

-

 

Διαφωνω. Abstraction σε τοσο απλο project ειναι απλα δεν-εχω-τι-να-κανω-αντε-να-καψω-καμια-ωρα. Το παλικαρι θελει να παραγει απλες κυματομορφες, το λειτουργικο κομματι τι ειναι; μια for (ολοκληρωμα αν δε κανω λαθος στο μαθηματικο ορο), και αν εχει καποιο plotter component μενει μονο με μια for.

 

Το παραπανω (που δεν εχει και plotter) το ποστρα μονο και μονο επειδη, ειδα κατι opengl κλπ λες και για να βγαλει μια κυματομορφη θα πρεπει να δουλεψει σε homogeneous coordinates. Γενικα δεν καταλαβαινω γιατι το απλο το κανετε πολυπλοκο.

Δημοσ.

...

Γενικα δεν καταλαβαινω γιατι το απλο το κανετε πολυπλοκο.

 

Το "πρόβλημα" είναι πως ο tzouperman στο 1ο του post γράφει μεταξύ άλλων πως...

 

...

Το παραπάνω θέλω να το κάνω σε περιβάλλον εύχρηστο για τον χρήστη δηλαδή σε κάποιο παράθυρο(π.χ. με WINAPI) που να μπορεί να αλλάζει τις παραμέτρους και πατώντας ένα κουμπί να σχεδιάζετε η κυματομορφή(GUI αν έχω καταλάβει καλά).

...

Σε μένα και σε σένα οι κώδικες που δώσαμε μπορεί να φαίνονται (και να είναι) απλοί, αλλά για κάποιον που ουσιαστικά δεν ξέρει καν την γλώσσα δεν είναι καθόλου απλό. Και δεν υπάρχει και απλός τρόπος να φτιάξει αυτό που περιγράφει. Πρέπει αναγκαστικά να μάθει κάποιο GUI API και για να το μάθει πρέπει πρώτα να έχει μάθει την γλώσσα, ή τουλάχιστον δεν γνωρίζω εγώ κάποιον άλλον τρόπο που να είναι απλός.

 

Το θέλει και standalone executable, οπότε αμέσως-αμέσως αποκλείονται κατά μεγάλη πλειοψηφία interpreters & scripting γλώσσες, είτε πατάνε είτε όχι σε virtual machines.

 

Άρα τι μένει; Να μάθει μια directly compiled γλώσσα, ένα GUI API και ένα Plotting API (το GDI στο παράδειγμα του δικού σου κώδικα). Οπότε μόνο απλό δεν είναι, εξού και η πρόταση μου για FreeGLUT +GLUI ή έστω FLTK που είναι μακράν πιο απλές λύσεις από το να "μπλέξει" με Win/GTK+/QT.

 

Ακόμα κι έτσι όμως πάλι δεν θα του φανεί απλό, αφού δεν έχει καμία πρωτύτερη επαφή.

Δημοσ.

Ενταξει, αν ειναι ευκολοτερο να κατεβασει 3213123 frameworks + 2-3 compilers απτο να καλεσει την Polyline (που ανηκει και στο OS του windows...) παω πασο.

Δημοσ.

Αν αυτό εδώ μαζί με αυτό εδώ είναι 3213123 frameworks + 2-3 compilers, τότε πάω εγώ πάσο.

 

Κι αν αυτό...

 

...

Το παραπάνω θέλω να το κάνω σε περιβάλλον εύχρηστο για τον χρήστη δηλαδή σε κάποιο παράθυρο(π.χ. με WINAPI) που να μπορεί να αλλάζει τις παραμέτρους και πατώντας ένα κουμπί να σχεδιάζετε η κυματομορφή(GUI αν έχω καταλάβει καλά).

...

 

πραγματοποιείται με κλήση της Polyline (που ανήκει στο OS του windows) τότε να πάω 1000 φορές πάσο.

 

ΥΓ. Για δείξε ολόκληρο το κώδικα σε Win32 API :P

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...