DIRECTORY Cubic, Complex, FitState USING [defaultHandle], JaM, FitJaM, FitBasic, Real, Rope, Seq, Vector; FitPointEditJaM: CEDAR PROGRAM IMPORTS Complex, JaM, Real, Rope, Vector, FitState, FitJaM = { GetVec: PROC [state: JaM.State] RETURNS [z:Complex.Vec] = { z.y _ JaM.PopReal[state]; z.x _ JaM.PopReal[state]; }; SelectSa: PROC [state: JaM.State] = {OPEN FitState.defaultHandle^; closest: FitBasic.SampleHandle; z: Complex.Vec; z.y _ JaM.PopReal[state]; z.x _ JaM.PopReal[state]; [closest,] _ FindSa[z]; IF closest#NIL THEN slist.selectedSample _ closest; }; TheSa: PROC [state: JaM.State] = {OPEN FitState.defaultHandle^; JaM.PushReal[state,slist.selectedSample.xy.x]; JaM.PushReal[state,slist.selectedSample.xy.y]; }; FindSa: PROC [z: Complex.Vec] RETURNS[found: FitBasic.SampleHandle, index: NAT] = {OPEN FitState.defaultHandle^; closest,d: REAL _ 10.0E+30; i: NAT _ 0; found _ NIL; FOR s: FitBasic.SampleHandle _ slist.header.next, s.next UNTIL s=slist.header DO p: Complex.Vec _ XForm[s.xy]; IF ABS[p.x-z.x] . Selects a sample point for editing JaM.Register[state,".thesa", TheSa]; -- => x y . Returns the current sample JaM.Register[state,".thetan", TheTan]; -- => x y boolean . Returns the tangent of the current sample, and whether it is a node JaM.Register[state,".deletesa", DeleteSa]; -- => . Deletes the current sample JaM.Register[state,".insertsa", InsertSa]; -- x y => . Inserts before the current sample JaM.Register[state,".insertbetween", InsertBetween]; -- x y => . Inserts between the current sample and the neighbor nearest the new point JaM.Register[state,".nodesa", NodeSa]; -- boolean => . Makes or unmakes a node JaM.Register[state,".tansa", TanSa]; -- deltax deltay => . Sets the tangent at a sample JaM.Register[state,".cuspsa", CuspSa]; -- boolean => . Makes or unmakes a cusp JaM.Register[state,".cuspnode", CuspNode]; -- boolean => . Makes or unmakes a cusp ONLY on a node JaM.Register[state,".tanoutsa", TanOutSa]; -- deltax deltay => . Sets the outgoing tangent JaM.Register[state,".homesa", HomeSa]; -- => . Selects the header JaM.Register[state,".makefirstsa", MakeFirstSa]; -- => . Selects the header JaM.Register[state,".nextsa", NextSa]; -- => x y . Moves selection to the next sample JaM.Register[state,".prevsa", PrevSa]; -- => x y . Moves selection to the previous sample JaM.Register[state,".scalesa", ScaleSa]; -- x y => . Scales/rotates all samples by multiplying by x+iy JaM.Register[state,".transa", TranSa]; -- x y => . Translates all samples by adding x+iy JaM.Register[state,".subrange", Subrange]; -- change CurrentSamples so it returns a subrange JaM.Register[state,".allsa", NoSubrange]; -- remove the subrange JaM.Register[state,".resetnodes", ResetDefaultNodes]; -- remove the nodes JaM.Register[state,".resetcusps", ResetDefaultCusps]; -- remove the cusps }; FitJaM.RegisterInit[$FitPointEditJaM, Init]; }. þFitPointEditJaM.mesa The point editing part of the old FitStateImpl Last Edited by Stone June 4, 1984 10:00:28 am PDT Last Edited by Michael Plass December 7, 1982 10:25 am Last Edited by: Stone, November 21, 1983 11:33 am Sample Editing Commands Ê|˜Jšœ™Jšœ.™.Jšœ1™1Jšœ7™7Jšœ1™1J˜šÏk ˜ J˜J˜Jšœ œ˜J˜J˜J˜ J˜J˜J˜J˜J˜—šœœ˜Jšœ7˜>—šÏnœœœ˜;Jšœ˜Jšœ˜Jšœ˜—šžœœœ˜BJ˜J˜J˜Jšœ˜J˜Jšœ œœ ˜3J˜J˜—šžœœœ˜?Jšœ.˜.Jšœ.˜.Jšœ˜—J˜š žœœœ&œœ˜pJšœ œ ˜Jšœœ˜ Jšœœ˜ šœ6œ˜PJ˜Jšœœœœ˜0šœ-˜4J˜$—J˜Jšœ˜—J˜J˜—šžœœœ-˜TJ˜J˜J˜J˜—šžœœœ˜Bšœ%œ˜-J˜J˜J˜J˜ J˜ J˜J˜—J˜J˜—šžœœœ˜BJšœœ˜ J˜3J˜J˜Jšœ@˜@J˜J˜—šž œœœ˜GJ˜Jšœœ˜J˜3J˜J˜˜J˜T—Jšœœ>˜RJšœD˜HJ˜J˜—šžœœœ˜@J˜1Jšœœœ˜IJ˜J˜—šžœœ˜"JšœE˜E—J˜šžœœœ˜@JšœQ˜Q—šžœœœ˜BJšœœ3˜V—šžœœ˜%JšœD˜D—šžœœœ˜@Jšœ%˜%—šž œœœ˜Eš œœœ%œ*œ˜yJ˜+J˜,J˜)J˜.J˜&J˜&—J˜J˜—šžœœœ˜@J˜1šœ%˜+J˜0—J˜J˜—šžœœœ˜@J˜1šœ%˜+J˜0—J˜J˜—šžœœœ˜AJ˜šœ6œ˜PJ˜J˜J˜J˜Jšœ˜—J˜J˜—šžœœœ˜@J˜šœ6œ˜PJ˜Jšœ˜—J˜J˜—šžœœœ˜BJ˜"J˜Jšœœ˜ J˜J˜J˜J˜J˜J˜Jšœœ*œ*˜eJ˜—Jšž œœœ5œ˜eJšžœœD˜[JšžœœD˜[J˜˜Jšœ™Jšœ+Ïc.˜YJšœ%Ÿ&˜KJšœ'ŸW˜~Jšœ+Ÿ#˜NJšœ+Ÿ-˜XJšœ5ŸU˜ŠJšœ'Ÿ'˜NJšœ%Ÿ2˜WJšœ'Ÿ'˜NJšœ+Ÿ6˜aJšœ+Ÿ/˜ZJšœ'Ÿ˜AJšœ1Ÿ˜KJšœ'Ÿ.˜UJšœ'Ÿ2˜YJšœ)Ÿ>˜gJšœ'Ÿ2˜YJšœ+Ÿ1˜\Jšœ*Ÿ˜@Jšœ6Ÿ˜IJšœ6Ÿ˜IJ˜—J˜,J˜J˜—…—Ø"R