e      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z {|}~     GHCunstablestephen.tetley@gmail.com0:Vertical alignment - align to the left, center or bottom. ;Horizontal alignment - align to the top, center or bottom. The center of a picture.    a `over` b Place 'picture' a over b. The idea of over here is in = terms z-ordering, nither picture a or b are actually moved.   a `under` b  Similarly under! draws the first picture behind  the second but move neither. under was previously beneath. *Move in both the horizontal and vertical.  Extract the top-left corner. !Extract the top-right corner. " Extract the bottom-left corner. #!Extract the bottom-right corner. $%&'( 2Draw a centered over b - a is moved, b is static.   a `centerOver` b   was previously the (-@ -) operator.   a `nextToH` b Horizontal composition - move b, placing it to the right  of a.  $ was previously the (->-) operator.   a `nextToV` b Vertical composition - move b, placing it below a. nextToV was previously the (- -) operator. )Place the picture at the supplied point.  was previous the at operator. *Center the picture at the supplied point.   xs `stackOver` x Stack the list of pictures xs   x. >Note, the first picture in the list is drawn at the top, all $ the pictures in the list are drawn 'over' x. No pictures  are moved  [p1,p2,p3]  p4 => [p1,p2,p3,p4]  x `zconcat` xs  Concatenate x over the list of pictures xs. x. is drawn at the top. No pictures are moved.  p1  [p2,p3,p4] => [p1,p2,p3,p4]Concatenate the list pictures xs horizontally with nextToH  starting at x. !Concatenate the list of pictures xs vertically with nextToV  starting at x. 9Stack pictures centered ontop of each other - the first > picture in the list is drawn at the top, last picture is on  drawn at the bottom.   hspace n a b Horizontal composition - move b, placing it to the right  of a with a horizontal gap of n separating the pictures.   vspace n a b Vertical composition - move b, placing it below a with a  vertical gap of n separating the pictures.   hsep n x xs !Concatenate the list of pictures xs horizontally with  hspace starting at x&. The pictures are interspersed with  spaces of n units.   vsep n x xs !Concatenate the list of pictures xs vertically with  vspace starting at x&. The pictures are interspersed with  spaces of n units. )  alignH align a b Horizontal composition - move b, placing it to the right  of a0 and align it with the top, center or bottom of a.   alignV align a b Vertical composition - move b, placing it below a 0 and align it with the left, center or right of a.   alignHSep align sep a b !Spacing version of alignH - move b to the right of a  separated by sep units, align b according to align.   alignHSep align sep a b !Spacing version of alignV - move b below a  separated by sep units, align b according to align.  Variant of % that aligns the pictures as well as  concatenating them.  Variant of % that aligns the pictures as well as  concatenating them.  Variant of hsep% that aligns the pictures as well as ! concatenating and spacing them.  Variant of vsep% that aligns the pictures as well as ! concatenating and spacing them. !  !  !  GHCunstablestephen.tetley@gmail.com!Version number  (0,6,0) !!!GHC unstablestephen.tetley@gmail.com"#$%&'()*+,-./0123456789:"#$%&'()*+,-./0123456789:.*+,-/%&'()"#$0123546789:"#$#$%&'()&'()*+,-+,-./0123456789:GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>;<=>;<=>;<=>;<=>GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com> ?@ABCDEFGHIJK ?@ABCDEFGHIJK ?@ABCDEFGHIJK ?@ABCDEFGHIJKGHCunstablestephen.tetley@gmail.com LMNOPQRS6velo consumes the list as per map, but builds it back , as a Hughes list - so items can be dropped  replaced, repeated, etc... TUV LMNOPQRSTUV LMNOPQRSTUV LMNOPQRSTUVGHC highly unstablestephen.tetley@gmail.comWXYY : ' num_points * radius * center -> [point]  ZZ :  ypos * step * (x0,x1) -> [point]  8Generate points in a horizontal line between x0 and x1. >Note - the step increment is w.r.t. 0 rather than x0. x0 and $ x1 are just the range. An example:   hpoints 0 10 (5,35)  [P2 10 0, P2 20 0, P2 30 0] [[ :  xpos * step * (y0,y1) -> [point]  6Generate points in a vertical line between y0 and y1. >Note - the step increment is w.r.t. 0 rather than y0. y0 and $ y1 are just the range. An example:   vpoints 5 100 (50,500) * [P2 5 100, P2 5 200, P2 5 300, P2 5 400] *+,WXYZ[WXYZ[WXYZ[GHC highly unstablestephen.tetley@gmail.com$\]^_`abcdefgh8Note - this representation allows for zero, one or more & Primitives to be collected together. iComposition operator...  cc f g = \x y -> f x (g x y) jReverse application. k8Note - a Picture cannot be empty whereas a Graphic can. ( Hence this function returns via Maybe. lUnsafe version of k - this function throws % an error when the graphic is empty. mLift a Primitive to a Graphic nThe empty graphic. o"Text should not contain newlines. Note the supplied point is the ' left-baseline'. pq Vector is applied to the point. rSupplied point is center. sSupplied point is center. -tSupplied point is  bottom-left. uu : / stroked_props * num_subs * radius -> GraphicF  /Draw a stroked circle made from Bezier curves. num_subs is * the number of subdivisions per quadrant. >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is the center. vv : , fill_props * num_subs * radius -> GraphicF  .Draw a filled circle made from Bezier curves. num_subs is * the number of subdivisions per quadrant. >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is the center. ww is drawn with Wumpus-Core's ellipse primitive. 5This is a efficient representation of circles using  PostScript's arc or SVG's circle in the generated : output. However, stroked-circles do not draw well after < non-uniform scaling - the line width is scaled as well as  the shape. =For stroked circles that can be scaled, consider making the  circle from Bezier curves. xyz{|| : : stroke_props * xstep * ystep * boundary_rect -> GraphicF  >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is bottom-left. }} : * stroke_props * boundary_rect -> GraphicF  >The result is a HOF (GraphicF :: Point -> Graphic) where the  point is bottom-left. ~#\]^_`abcdefghijklmnopqrstuvwxyz{|}~#hgfeijklmnopqrstuvwdcxy{z_`ab^|}]\~#\]^_`ab`abcdefghijklmnopqrstuvwxyz{|}~ GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>./01JLine in equational form, i.e. Ax + By + C = 0. 2345K678LMNOPQ9R:;<ST:Calculate the counter-clockwise angle between two points  and the x-axis. JKLMNOPQRST LMKNJOPQRST JKLMMNOPQRST GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>#UVWXYZ[\]^_`abcdefghijklmn(Turn a BasicPath into an ordinary Path. <An empty path returns Nothing - the path representation in = Wumpus-Core does not allow empty paths - a path must always  have at least start point. 9Assumes path is properly formed - i.e. end point of one : segment is the same point as the start point of the next  segment. o=> Jens Gravesen'$s bezier arc-length approximation. =Note this implementation is parametrized on error tolerance. ?@Amidpoint between two points p"Curve subdivision via de Casteljau' s algorithm. q2subdivide with an affine weight along the line... BUVWXYZ[\]^_`abcdefghijklmnopqfbcde_a`YZ[\]^UVWXglmhijknopqUVWXVWXYZ[\]^Z[\]^_a``abcdecdefghijklmnopq GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>rsCDEFGHtuIJvwxKyz rstuvwxyz srtuvwxyz rstuvwxyzGHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>{|}~:A Mark is consider to be the height of a lowercase letter  in the current font. 7textDimensions : text -> DrawingAttr -> (width,height) LMNO{|}~{|}~{|}~|}~GHC unstablestephen.tetley@gmail.comGHC highly unstablestephen.tetley@gmail.com#\]^_`abcdefghijklmnopqrstuvwxyz{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>PQRSTUVWGHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>XYSupplied point is the center. ZNote disk is filled. [GHC unstablestephen.tetley@gmail.comGHC unstablestephen.tetley@gmail.com2ANode is drawn a a point supplied by the drawing  (e.g. current node of Turtle).  AGraphic param typically Point2 u or () <If the param is a point it will be supplied by the drawing  mode /5 drawing monad (e.g. the Turtle monad which supplies  the current point). GHC unstablestephen.tetley@gmail.com \]^_{|}~GHC unstablestephen.tetley@gmail.com`abcdefghi="#$%&'()*+,-./0123456789:{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>jklmnopqrstuvwxyz{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>#,Not working, though 161 should be uUpsilon. """GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>    GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>   GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>:Anchor on a border that can be identified with and angle.  textAnchor is the Bottom left corner  on the baseline.                         %GHC with TypeFamilies, GADTs and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p p q r s s t u v w x y z { { | } ~                          !"#$%&'()*+,-./0123456789:;<=> ? @ A B e C D E f F G H I J K L M N O P Q  R S S T U V W XYZ[\]^_`abcd~efghijklmmnoppqrstuuvwxyzz{|}~+wumpus-basic-0.6.0Wumpus.Basic.PictureLanguageWumpus.Basic.VersionNumberWumpus.Basic.Monads.TurtleClassWumpus.Basic.Utils.CombinatorsWumpus.Basic.SafeFontsWumpus.Basic.Utils.HList Wumpus.Basic.Graphic.PointSupplyWumpus.Basic.Graphic.PrimitiveWumpus.Basic.Colour.X11ColoursWumpus.Basic.Colour.SVGColoursWumpus.Basic.Utils.IntersectionWumpus.Basic.Paths.BaseWumpus.Basic.Paths.Construction Wumpus.Basic.Graphic.DrawingAttr#Wumpus.Basic.Monads.DrawingCtxClassWumpus.Basic.PathsWumpus.Basic.Dots.BaseWumpus.Basic.Monads.TraceClassWumpus.Basic.Monads.Drawing Wumpus.Basic.Monads.DrawingMonadWumpus.Basic.Monads.TurtleMonadWumpus.Basic.Text.LRTextWumpus.Basic.Text.LRSymbolWumpus.Basic.Arrows.TipsWumpus.Basic.ArrowsWumpus.Basic.AnchorsWumpus.Basic.DotsWumpus.Basic.GraphicVAlignVRightVCenterVLeftHAlignHBottomHCenterHTop centerPointoverunder centerOvernextToHnextToVatPoint centeredAt stackOverzconcathcatvcatstackOverCenterhspacevspacehsepvsepalignHalignV alignHSep alignVSephcatAvcatAhsepAvsepAwumpus_basic_version TurtleScaleMxStepyStepTurtleMgetLocsetLoc getOrigin setOrigin TurtleConfigxstepystepCoord regularConfigaskStepssetsLocsetsLoc_resetLoc moveRightmoveLeftmoveUpmoveDownnextLinegetPos scaleCoordstarstar2star3star4 timesRoman timesItalic timesBoldtimesBoldItalic helveticahelveticaOblique helveticaBoldhelveticaBoldObliquecouriercourierOblique courierBoldcourierBoldObliquesymbolHemptyHwrapHconsHsnocHappendHunfoldrHveloHconcatHtoListH fromListHtwo_pihalf_pipolygonPointsVhpointsvpoints DRectangleLoc RectangleLoc DRectangle Rectangle rect_width rect_heightDPoint2TPoint2T DGraphicFGraphicFDGraphicGraphicccsupply drawGraphic drawGraphicUwrapGemptyGtextline xtextline straightLinestrokedRectanglefilledRectangle rectanglePath strokedCircle filledCircledisk positionWithdisphdispvdispgridborderwithinRectangleLocantique_white1antique_white2antique_white3antique_white4 aquamarine1 aquamarine2 aquamarine3 aquamarine4azure1azure2azure3azure4bisque1bisque2bisque3bisque4blue1blue2blue3blue4brown1brown2brown3brown4 burlywood1 burlywood2 burlywood3 burlywood4 cadet_blue1 cadet_blue2 cadet_blue3 cadet_blue4 chartreuse1 chartreuse2 chartreuse3 chartreuse4 chocolate1 chocolate2 chocolate3 chocolate4coral1coral2coral3coral4 cornsilk1 cornsilk2 cornsilk3 cornsilk4cyan1cyan2cyan3cyan4dark_goldenrod1dark_goldenrod2dark_goldenrod3dark_goldenrod4dark_olive_green1dark_olive_green2dark_olive_green3dark_olive_green4 dark_orange1 dark_orange2 dark_orange3 dark_orange4 dark_orchid1 dark_orchid2 dark_orchid3 dark_orchid4dark_sea_green1dark_sea_green2dark_sea_green3dark_sea_green4dark_slate_gray1dark_slate_gray2dark_slate_gray3dark_slate_gray4 deep_pink1 deep_pink2 deep_pink3 deep_pink4deep_sky_blue1deep_sky_blue2deep_sky_blue3deep_sky_blue4 dodger_blue1 dodger_blue2 dodger_blue3 dodger_blue4 firebrick1 firebrick2 firebrick3 firebrick4gold1gold2gold3gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4green1green2green3green4 honeydew1 honeydew2 honeydew3 honeydew4 hot_pink1 hot_pink2 hot_pink3 hot_pink4 indian_red1 indian_red2 indian_red3 indian_red4ivory1ivory2ivory3ivory4khaki1khaki2khaki3khaki4lavender_blush1lavender_blush2lavender_blush3lavender_blush4lemon_chiffon1lemon_chiffon2lemon_chiffon3lemon_chiffon4 light_blue1 light_blue2 light_blue3 light_blue4 light_cyan1 light_cyan2 light_cyan3 light_cyan4light_goldenrod1light_goldenrod2light_goldenrod3light_goldenrod4 light_pink1 light_pink2 light_pink3 light_pink4 light_salmon1 light_salmon2 light_salmon3 light_salmon4light_sky_blue1light_sky_blue2light_sky_blue3light_sky_blue4light_steel_blue1light_steel_blue2light_steel_blue3light_steel_blue4 light_yellow1 light_yellow2 light_yellow3 light_yellow4magenta1magenta2magenta3magenta4maroon1maroon2maroon3maroon4medium_orchid1medium_orchid2medium_orchid3medium_orchid4medium_purple1medium_purple2medium_purple3medium_purple4 misty_rose1 misty_rose2 misty_rose3 misty_rose4 navajo_white1 navajo_white2 navajo_white3 navajo_white4 olive_drab1 olive_drab2 olive_drab3 olive_drab4orange1orange2orange3orange4 orange_red1 orange_red2 orange_red3 orange_red4orchid1orchid2orchid3orchid4 pale_green1 pale_green2 pale_green3 pale_green4pale_turquoise1pale_turquoise2pale_turquoise3pale_turquoise4pale_violet_red1pale_violet_red2pale_violet_red3pale_violet_red4 peach_puff1 peach_puff2 peach_puff3 peach_puff4pink1pink2pink3pink4plum1plum2plum3plum4purple1purple2purple3purple4red1red2red3red4 rosy_brown1 rosy_brown2 rosy_brown3 rosy_brown4 royal_blue1 royal_blue2 royal_blue3 royal_blue4salmon1salmon2salmon3salmon4 sea_green1 sea_green2 sea_green3 sea_green4 seashell1 seashell2 seashell3 seashell4sienna1sienna2sienna3sienna4 sky_blue1 sky_blue2 sky_blue3 sky_blue4 slate_blue1 slate_blue2 slate_blue3 slate_blue4 slate_gray1 slate_gray2 slate_gray3 slate_gray4snow1snow2snow3snow4 spring_green1 spring_green2 spring_green3 spring_green4 steel_blue1 steel_blue2 steel_blue3 steel_blue4tan1tan2tan3tan4thistle1thistle2thistle3thistle4tomato1tomato2tomato3tomato4 turquoise1 turquoise2 turquoise3 turquoise4 violet_red1 violet_red2 violet_red3 violet_red4wheat1wheat2wheat3wheat4yellow1yellow2yellow3yellow4 alice_blue antique_whiteaqua aquamarineazurebeigebisqueblackblanched_almondblue blue_violetbrown burlywood cadet_blue chartreuse chocolatecoralcornflower_bluecornsilkcrimsoncyan dark_blue dark_cyandark_goldenrod dark_gray dark_green dark_grey dark_khaki dark_magentadark_olive_green dark_orange dark_orchiddark_red dark_salmondark_sea_greendark_slate_bluedark_slate_graydark_slate_greydark_turquoise dark_violet deep_pink deep_sky_bluedim_graydim_grey dodger_blue firebrick floral_white forest_greenfuchsia gainsboro ghost_whitegold goldenrodgraygreen green_yellowgreyhoneydewhot_pink indian_redindigoivorykhakilavenderlavender_blush lawn_green lemon_chiffon light_blue light_coral light_cyanlight_goldenrod_yellow light_gray light_green light_grey light_pink light_salmonlight_sea_greenlight_sky_bluelight_slate_graylight_slate_greylight_steel_blue light_yellowlime lime_greenlinenmagentamaroonmedium_aquamarine medium_blue medium_orchid medium_purplemedium_sea_greenmedium_slate_bluemedium_spring_greenmedium_turquoisemedium_violet_red midnight_blue mintcream mistyrosemoccasin navajo_whitenavyold_laceolive olive_draborange orange_redorchidpale_goldenrod pale_greenpale_turquoisepale_violet_red papaya_whip peach_puffperupinkplum powder_bluepurplered rosy_brown royal_blue saddle_brownsalmon sandy_brown sea_greenseashellsiennasilversky_blue slate_blue slate_gray slate_greysnow spring_green steel_bluetantealthistletomato turquoisevioletwheatwhite whitesmokeyellow yellow_greenLineEqn PointSlope LineSegmentLS pointSlopelineEqn toLineEqn findIntersect intersectionrectangleLineslangleLine line_startline_endCurve curve_start ctrl_point1 ctrl_point2 curve_endPathSegCurveSegLineSegPath path_length path_elementsPathF emptyPath addSegment segmentLength segmentStart segmentEndplinepcurve toPrimPath toPrimPathU subdivide subdividetCPathMPathrunPathexecPathlinetobeziertocurvetoverticalHorizontalhorizontalVertical DrawingAttr stroke_props font_props stroke_colour fill_colour standardAttr strokeAttrfillAttrtextAttr markHeighttextDimensionsthick ultrathickthinfontfacefontsize DrawingCtxM askDrawingCtxlocalCtxwithinModifiedCtxconnectS pathGraphicshortenshortenLshortenRmidpoint directionL directionRdotChardotTextdotHLinedotVLinedotXdotPlusdotCross dotDiamond dotFDiamonddotDisk dotSquare dotCircle dotPentagondotStar dotAsteriskdotOPlus dotOCross dotFOCrossTraceMtrace AConnector AFreeGraphicANodeAGraphicagDrawFagMakeFatnodenodeAtliftAFGconnectconnect_propsDrawingTDrawing runDrawing execDrawing runDrawingT execDrawingT TurtleDrawingTurtleTTurtle runTurtle runTurtleTrunTurtleDrawingexecTurtleDrawingTextMrunTextMtextcharkernnewlinebracketFontFacealphabetagammadeltaepsilonzetaetathetaiotakappalambdamunuxipirhosigmatauupsilonphichipsiomegauGammauDeltauThetauLambdauXiuPiuSigmauUpsilonuPhiuPsiuOmegatri90tri60tri45otri90otri60otri45barb90barb60barb45perpline arrowTri90 arrowTri60 arrowTri45 arrowOTri90 arrowOTri60 arrowOTri45 arrowBarb90 arrowBarb60 arrowBarb45 arrowPerp RadialAnchor radialAnchor TextAnchor baselineSWCardinalAnchor2 northeast southeast southwest northwestCardinalAnchornorthsoutheastwest CenterAnchorcenter DotAnchor rightBound leftBound bottomBoundtopBoundmovetoplefttopright bottomleft bottomrightleftmidrightmidtopmid bottommidmidptvecMoveinitialceilingifloori rectangleIntersectionResult NoIntersect Contained Intersects _line_eqn_A _line_eqn_B _line_eqn_C_point_slope_point_point_slope_slope quadrantCheck intersect1lineF affineComb curveLengthgravesenLengthctrlPolyLength cordLength pointMidpointaffineCombinationgetMPath PathState current_point path_accumexchTiptip pcurveAng thick_lineultra_thick_line thin_line setLineWidth shortenSegL shortenLineL shortenSegR shortenLineRlineDirectionLlineDirectionRcurveDirectionLcurveDirectionR axialLine pathDiamondbkCircle getDrawingT getDrawinggetTurtleDrawing getTurtleT getTurtle TurtleState_turtle_origin_current_coord TGraphicF getTGraphicFgetTextMEnvVDistStxy_pos font_deschorizontal_disp acc_graphicIdxidx_xidx_yrightndown1consT setFontAttr setsFontAttr getFontAttrmakeDisplacement useSymbol tripointstriAngbarbAng arrowWidth triTipRight barbTipRightCardinalNWWWSWSSSEEENENN center_anchor radial_anchorcardinal_anchor circleAnchorradialCardinal rectCardinalrectangleAnchor