RE: Mathlink & Graphics....
- To: mathgroup at smc.vnet.net
- Subject: [mg2217] RE: [mg2174] Mathlink & Graphics....
- From: "John R. Fultz" <jfultz>
- Date: Tue, 17 Oct 1995 02:33:00 -0400
>From: The GodFather[SMTP:gandalf at dogbert.ugcs.caltech.edu] To: mathgroup at smc.vnet.net >Sent: Thursday, October 12, 1995 12:58 AM >To: mathgroup at smc.vnet.net >Subject: [mg2174] Mathlink & Graphics.... > > > Unix Platform.... > > I've been trying to do this for a bit of time.... > > Basically, I would like from a C-code, to generate > a list of numbers {{1,2},{2,1}} and plot their positions > using mathematica's handy plotting routines.... > > If someone could post a way to simply execute a > Plot[x^2,{x,-2,2}], and either have mathematica display > it (in X), or return PostScript to the link stream or > to an output file I would be extremely grateful.... I've included code at the end which does exactly what you need. I also strongly suggest you download the MathLink Tutorial from MathSource, available as item 0206-693. Among other things, this discusses graphics. Note that, since the default init.m sets $DisplayFunction to "stdout" whenever MathLink has a parent connection (e.g. your MathLink program), you have to force it to set the $DisplayFunction elsewhere. I did so by forcing Mathematica to do a Get["Motif.m"] (of course, you could use OL.m or GL.m, if appropriate for your machine, as well). John Fultz Wolfram Research, Inc. -------------------------------- #include "mathlink.h" #include <stdlib.h> #include <stdio.h> char *foo[] = {"-linkname", "math -mathlink", "-linkmode", "launch", 0}; int main (argc, argv) int argc; char* argv[]; { MLINK lp; MLEnvironment ep; int i; char s; ep=MLInitialize(NULL); lp = MLOpen(4, foo); MLPutFunction(lp, "EvaluatePacket", 1); MLPutFunction(lp, "Get", 1); MLPutString(lp, "Motif.m"); MLEndPacket(lp); while (MLNextPacket(lp) != RETURNPKT) {MLNewPacket(lp); }; MLNewPacket(lp); MLPutFunction(lp, "EvaluatePacket", 1); MLPutFunction(lp, "ToExpression", 1); MLPutString(lp, "Plot[x^2, {x, -2, 2}]"); MLEndPacket(lp); while (MLNextPacket(lp) != RETURNPKT) {MLNewPacket(lp); }; MLNewPacket(lp); printf("Press Return to end."); scanf("%c",&s); MLClose(lp); MLDeinitialize(ep); }