Re: Problems creating a package file
- To: mathgroup at smc.vnet.net
- Subject: [mg77085] Re: Problems creating a package file
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sun, 3 Jun 2007 06:08:02 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <f3r92a$sgg$1@smc.vnet.net>
chuck009 wrote: > Hello everyone. > > I'd like to create my own package of some plotting routines but I'm having problems getting routines to work within the package. I suspect my context is not right. I created PlotRoutines.m via File/SaveAsSpecial/PackageFormat and placed it in a PlotUtilities directory within the ExtraPackages directory: > > (* > PlotRoutines.m > > Package for plot routines *) > > BeginPackage["PlotUtilities`PlotRoutines`"]; > > TagPoints::usage = "Tag Polygons with '1' which satisfy passed inequality" > > Begin["`Private`"]; > > TagPoints[inequality_][p_] := > Block[{x, y, z}, {x, y, z} = p; If[inequality, {p, 1}],{p, 2}]]; ^^^^^ ^^^^^^^^^^^^^ ^ (1) (2) (3) (1) -> Block is not needed. Should use Module anyway. (2) -> Useless assignment since x, y, and z are not used. (3) -> Extraneous square bracket: end the If statement here. > > End[]; > > EndPackage[]; > > It takes a Graphics3D object and tests each coordinate of each Polygon matching the search criteria specified in the inequality and is suppose to append either a 1 or a 2 to each coordinate. I'd call it as: > > > << PlotUtilities`PlotRoutines` > > p1=Graphics3D[Plot3D[some plot here]] > > p1 /. Polygon[pts_] :> Polygon[TagPoints[z â?¥ 2] /@ pts]; ^^ ^^ (4) (5) (4) -> z has no value here. (5) -> The second argument of TagPoints is missing ==> TagPoints is never executed. > However it doesn't update the polygons and I know it works when I create the TagPoints function within the notebook. Also, I noticed when I first create the *.m file, Mathematica adds (* *) to the file which I remove. Not sure what to do. Can someone help me? > You could write your package as suggested below. (** Beginning of the file **) (*PlotRoutines.m Package for plot routines*) BeginPackage["PlotUtilities`PlotRoutines`"]; TagPoints::usage = "Tag Polygons with '1' which satisfy passed inequality" Begin["`Private`"]; TagPoints[True][p_] := {p, 1} TagPoints[False][p_] := {p, 2} End[]; EndPackage[]; (* End of the file *) Save the above in a .m file. Now we can test it as in the following: In[1]:= << "PlotUtilities`PlotRoutines`" In[2]:= $ContextPath Out[2]= {"PlotUtilities`PlotRoutines`", "Global`", "System`"} In[3]:= Information["TagPoints", LongForm -> False] "Tag Polygons with '1' which satisfy passed inequality" In[4]:= p1 = Graphics3D[Plot3D[x*Sin[y] + y*Cos[x], {x, 0, 2*Pi}, {y, 0, Pi}]]; p1 /. Polygon[pts_] :> Polygon[ (TagPoints[#1[[3]] >= 2][#1] & ) /@ pts]; In[6]:= (Short[#1, 6] & )[FullForm[%]] Out[6]//Short= Graphics3D[List[Polygon[List[List[List[0.`,0.1308996938995747`,0.\ 1308996938995747`],2],List[List[0.`,0.`,0.`],2],\[LeftSkeleton]1\ \[RightSkeleton],List[List[0.2617993877991494`,0.1308996938995747`,0.\ 16061107220589643`],2]]],\[LeftSkeleton]575\[RightSkeleton]]\ ,List[Rule[PlotRange,Automatic],\[LeftSkeleton]30\[RightSkeleton],\ \[LeftSkeleton]1\[RightSkeleton]]] Regards, Jean-Marc