1      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789: ; < = > ? @ 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 { | } ~        !"#$%&'()*+,-./0GHC with TypeFamilies and moreunstablestephen.tetley@gmail.com>*Move in both the horizontal and vertical. Move vertically. Move horizontally.   Create a picture) that has no content but occupies space  (i.e. it has a bounding box).  a `over` b Place 'picture' a over b. The idea of over here is the same ? as z-ordering in 2D design programs. Implementations of this  class should 'draw'$ picture a over b but move neither.  Similarly beneath should 'draw' the first picture behind  the second but move neither. "Beneath has a default definition:  beneath = flip over  The type of points within a Picture. :Vertical alignment - align to the left, center or bottom. ;Horizontal alignment - align to the top, center or bottom. The center of a picture. Extract the top-left corner. Extract the top-right corner.  Extract the bottom-left corner. !Extract the bottom-right corner. 12345 a -@- b Center a on top of b, a! is potentially moved and drawn    b.  a ->- b Horizontal composition - move b, placing it to the right  of a.  a -<- b Horizontal composition - move a, placing it to the left  of b.  a -//- b Vertical composition - move b, placing it below a. ! a `below` b Vertical composition - move a, placing it below b " a `above` b Vertical composition - move a, placing it above b. #)Place the picture at the supplied point. $*Center the picture at the supplied point. % xs `stackOnto` a Stack the list of pictures xs   a. =Note, the first picture in the list is drawn at the top, the  last picture is draw   a. & x ->- xs Concatenate the list pictures xs horizontally with (->-)  starting at x. ' x -//- xs !Concatenate the list of pictures xs vertically with (-//-)  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. 67) hspace n a b Concatenate the pictures a and b with (->-) - injecting  a space of n! units to separate the pictures. * vspace n a b Concatenate the pictures a and b with (-//-) - injecting  a space of n! units to separate 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 z a b  Move picture b0 up or down to be horizontally aligned along a 0 line from the top, center or bottom of picture a . alignV z a b  Move picture b1 left or right to be vertically aligned along a : line from the left side, center or right side of picture a 89:/ Variant of &% that aligns the pictures as well as  concatenating them. 0 Variant of '% that aligns the pictures as well as  concatenating them. 1 Variant of hsep% that aligns the pictures as well as ! concatenating and spacing them. 2 Variant of vsep% that aligns the pictures as well as ! concatenating and spacing them. 3Create multiple lines of text. ;The dimension argument is the linespacing, measured as the ; distance between the upper lines descender and the lower  lines ascender. 2An error is throw if the list of strings is empty 4  !"#$%&'()*+,-./01234    "!#$%&'()*+,-./01234      !"#$%&'()*+,-./0123GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>=456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop=456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop=456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop=456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopGHCunstablestephen.tetley@gmail.comqVersion number  (0,4,0) qqqGHC unstablestephen.tetley@gmail.comrstuvwxyz{|}~rstuvwxyz{|}~~z{|}uvwxyrstrststuvwxyvwxyz{|}{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>      !      !      !      !GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com> "#$%&'()*+,-. "#$%&'()*+,-. "#$%&'()*+,-. "#$%&'()*+,-.GHCunstablestephen.tetley@gmail.com /01234566velo consumes the list as per map, but builds it back , as a Hughes list - so items can be dropped  replaced, repeated, etc... 789 /0123456789 /0123456789 /0123456789 GHC highly unstablestephen.tetley@gmail.com:;<< : ' num_points * radius * center -> [point]  == :  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] ;<=:;<=>:;<=>:;<=> GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>>?@A?Line in equational form, i.e. Ax + By + C = 0. BCDE@FGHABCDEFIGJKLH ?@ABCDEFGH AB@C?DEFGH ?@ABBCDEFGH GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>#IJKLMNOPQRSTUVWXYZ[\]^_`ab(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. cMN Jens Gravesen'$s bezier arc-length approximation. =Note this implementation is parametrized on error tolerance. OPQmidpoint between two points d"Curve subdivision via de Casteljau' s algorithm. e2subdivide with an affine weight along the line... RIJKLMNOPQRSTUVWXYZ[\]^_`abcdeZVWXYSUTMNOPQRIJKL[`a\]^_bcdeIJKLJKLMNOPQRNOPQRSUTTUVWXYWXYZ[\]^_`abcde GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>fgSTUVWXhiYZjkl[mn fghijklmn gfhijklmn fghijklmn GHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>opqrstuvwxy:A Mark is consider to be the height of a lowercase letter  in the current font. z7textDimensions : text -> DrawingAttr -> (width,height) \]^_{|}~opqrstuvwxyz{|}~opqrstuvwxyz{|}~opqrstpqrstuvwxyz{|}~GHC unstablestephen.tetley@gmail.comGHC highly unstablestephen.tetley@gmail.com#8Note - this representation allows for zero, one or more & Primitives to be collected together. Composition operator...  cc f g = \x y -> f x (g x y) Reverse application. 8Note - a Picture cannot be empty whereas a Graphic can. ( Hence this function returns via Maybe. Unsafe version of  - this function throws % an error when the graphic is empty. Lift a Primitive to a Graphic The empty graphic. "Text should not contain newlines. Note the supplied point is the ' left-baseline'.  Vector is applied to the point. Supplied point is center. Supplied point is center. `Supplied point is  bottom-left.  : / 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.  : , 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.  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.  : : 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. """GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>abcdefghGHC with TypeFamilies and morehighly unstable)Stephen Tetley <stephen.tetley@gmail.com>ijSupplied point is the center. kNote disk is filled. lGHC 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 mnopopqrstuvwxyz{|}~GHC unstablestephen.tetley@gmail.comqrstuvwxyz=rstuvwxyz{|}~opqrstuvwxyz{|}~GHChighly unstable)Stephen Tetley <stephen.tetley@gmail.com>{|}~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>+,-./0+,-./0+,-./0+,-./0 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST U V W X Y Z [ \ ] ^ _ ` a b c d d e f g g h i j k l m n o o p q r s t u v w x y z { | } ~                         ?      !"#$%&'()*+,-./0123456789:;<=4>?@ABCDEFGH I J K L M N O Z P Q R [ S T U V W X Y Z [ \ ] ^  _ ` ` a b c d e f g h ijklmnopqrstuvwxyz{||}~>wumpus-basic-0.4.0!Wumpus.Deprecated.PictureLanguageWumpus.Basic.X11ColoursWumpus.Basic.VersionNumberWumpus.Basic.Monads.TurtleClassWumpus.Basic.Utils.CombinatorsWumpus.Basic.SVGColoursWumpus.Basic.SafeFontsWumpus.Basic.Utils.HList Wumpus.Basic.Graphic.PointSupplyWumpus.Basic.Utils.IntersectionWumpus.Basic.Paths.BaseWumpus.Basic.Paths.Construction Wumpus.Basic.Graphic.DrawingAttr#Wumpus.Basic.Monads.DrawingCtxClassWumpus.Basic.GraphicWumpus.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.DotsMovemoveVerticalmoveVtopBound bottomBound HorizontalmoveH leftBound rightBoundBlankblank CompositeoverbeneathPUnitVAlignVRightVCenterVLeftHAlignHBottomHCenterHTopcentertoplefttopright bottomleft bottomright-@-->--<--//-belowaboveat centeredAt stackOntohcatvcatstackOntoCenterhspacevspacehsepvsepalignHalignVhcatAvcatAhsepAvsepA multilabel antiqueWhite1 antiqueWhite2 antiqueWhite3 antiqueWhite4 aquamarine1 aquamarine2 aquamarine3 aquamarine4azure1azure2azure3azure4bisque1bisque2bisque3bisque4blue1blue2blue3blue4brown1brown2brown3brown4 burlywood1 burlywood2 burlywood3 burlywood4 cadetBlue1 cadetBlue2 cadetBlue3 cadetBlue4 chartreuse1 chartreuse2 chartreuse3 chartreuse4 chocolate1 chocolate2 chocolate3 chocolate4coral1coral2coral3coral4 cornsilk1 cornsilk2 cornsilk3 cornsilk4cyan1cyan2cyan3cyan4darkGoldenrod1darkGoldenrod2darkGoldenrod3darkGoldenrod4darkOliveGreen1darkOliveGreen2darkOliveGreen3darkOliveGreen4 darkOrange1 darkOrange2 darkOrange3 darkOrange4 darkOrchid1 darkOrchid2 darkOrchid3 darkOrchid4 darkSeaGreen1 darkSeaGreen2 darkSeaGreen3 darkSeaGreen4darkSlateGray1darkSlateGray2darkSlateGray3darkSlateGray4 deepPink1 deepPink2 deepPink3 deepPink4 deepSkyBlue1 deepSkyBlue2 deepSkyBlue3 deepSkyBlue4 dodgerBlue1 dodgerBlue2 dodgerBlue3 dodgerBlue4 firebrick1 firebrick2 firebrick3 firebrick4gold1gold2gold3gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4green1green2green3green4 honeydew1 honeydew2 honeydew3 honeydew4hotPink1hotPink2hotPink3hotPink4 indianRed1 indianRed2 indianRed3 indianRed4ivory1ivory2ivory3ivory4khaki1khaki2khaki3khaki4lavenderBlush1lavenderBlush2lavenderBlush3lavenderBlush4 lemonChiffon1 lemonChiffon2 lemonChiffon3 lemonChiffon4 lightBlue1 lightBlue2 lightBlue3 lightBlue4 lightCyan1 lightCyan2 lightCyan3 lightCyan4lightGoldenrod1lightGoldenrod2lightGoldenrod3lightGoldenrod4 lightPink1 lightPink2 lightPink3 lightPink4 lightSalmon1 lightSalmon2 lightSalmon3 lightSalmon4 lightSkyBlue1 lightSkyBlue2 lightSkyBlue3 lightSkyBlue4lightSteelBlue1lightSteelBlue2lightSteelBlue3lightSteelBlue4 lightYellow1 lightYellow2 lightYellow3 lightYellow4magenta1magenta2magenta3magenta4maroon1maroon2maroon3maroon4 mediumOrchid1 mediumOrchid2 mediumOrchid3 mediumOrchid4 mediumPurple1 mediumPurple2 mediumPurple3 mediumPurple4 mistyRose1 mistyRose2 mistyRose3 mistyRose4 navajoWhite1 navajoWhite2 navajoWhite3 navajoWhite4 oliveDrab1 oliveDrab2 oliveDrab3 oliveDrab4orange1orange2orange3orange4 orangeRed1 orangeRed2 orangeRed3 orangeRed4orchid1orchid2orchid3orchid4 paleGreen1 paleGreen2 paleGreen3 paleGreen4paleTurquoise1paleTurquoise2paleTurquoise3paleTurquoise4paleVioletRed1paleVioletRed2paleVioletRed3paleVioletRed4 peachPuff1 peachPuff2 peachPuff3 peachPuff4pink1pink2pink3pink4plum1plum2plum3plum4purple1purple2purple3purple4red1red2red3red4 rosyBrown1 rosyBrown2 rosyBrown3 rosyBrown4 royalBlue1 royalBlue2 royalBlue3 royalBlue4salmon1salmon2salmon3salmon4 seaGreen1 seaGreen2 seaGreen3 seaGreen4 seashell1 seashell2 seashell3 seashell4sienna1sienna2sienna3sienna4skyBlue1skyBlue2skyBlue3skyBlue4 slateBlue1 slateBlue2 slateBlue3 slateBlue4 slateGray1 slateGray2 slateGray3 slateGray4snow1snow2snow3snow4 springGreen1 springGreen2 springGreen3 springGreen4 steelBlue1 steelBlue2 steelBlue3 steelBlue4tan1tan2tan3tan4thistle1thistle2thistle3thistle4tomato1tomato2tomato3tomato4 turquoise1 turquoise2 turquoise3 turquoise4 violetRed1 violetRed2 violetRed3 violetRed4wheat1wheat2wheat3wheat4yellow1yellow2yellow3yellow4gray0green0grey0maroon0purple0wumpus_basic_version TurtleScaleMxStepyStepTurtleMgetLocsetLoc getOrigin setOrigin TurtleConfigxstepystepCoord regularConfigaskStepssetsLocsetsLoc_resetLoc moveRightmoveLeftmoveUpmoveDownnextLinegetPos scaleCoordstarstar2star3star4 aliceBlue antiqueWhiteaqua aquamarineazurebeigebisqueblackblanchedAlmondblue blueVioletbrown burlywood cadetBlue chartreuse chocolatecoralcornflowerBluecornsilkcrimsoncyandarkBluedarkCyan darkGoldenroddarkGray darkGreendarkGrey darkKhaki darkMagentadarkOliveGreen darkOrange darkOrchiddarkRed darkSalmon darkSeaGreen darkSlateBlue darkSlateGray darkSlateGrey darkTurquoise darkVioletdeepPink deepSkyBluedimGraydimGrey dodgerBlue firebrick floralWhite forestGreenfuchsia gainsboro ghostWhitegold goldenrodgraygreygreen greenYellowhoneydewhotPink indianRedindigoivorykhakilavender lavenderBlush lawnGreen lemonChiffon lightBlue lightCoral lightCyanlightGoldenrodYellow lightGray lightGreen lightGrey lightPink lightSalmon lightSeaGreen lightSkyBluelightSlateGraylightSlateGreylightSteelBlue lightYellowlime limeGreenlinenmagentamaroonmediumAquamarine mediumBlue mediumOrchid mediumPurplemediumSeaGreenmediumSlateBluemediumSpringGreenmediumTurquoisemediumVioletRed midnightBlue mintcream mistyrosemoccasin navajoWhitenavyoldlaceolive oliveDraborange orangeRedorchid paleGoldenrod paleGreen paleTurquoise paleVioletRed papayawhip peachpuffperupinkplum powderBluepurplered rosyBrown royalBlue saddleBrownsalmon sandyBrownseaGreenseashellsiennasilverskyBlue slateBlue slateGray slateGreysnow springGreen steelBluetantealthistletomato turquoisevioletwheatwhite whitesmokeyellow yellowGreen timesRoman timesItalic timesBoldtimesBoldItalic helveticahelveticaOblique helveticaBoldhelveticaBoldObliquecouriercourierOblique courierBoldcourierBoldObliquesymbolHemptyHwrapHconsHsnocHappendHunfoldrHveloHconcatHtoListH fromListHtwo_pihalf_pipolygonPointsVhpointsvpointsLineEqn PointSlope LineSegmentLS pointSlopelineEqn toLineEqn findIntersect intersectionrectangleLinesLine line_startline_endCurve curve_start ctrl_point1 ctrl_point2 curve_endBPathSeg BCurveSegBLineSegBPath path_length path_elementsBPathF emptyPath addSegment segmentLength segmentStart segmentEndplinepcurvetoPathtoPathU subdivide subdividetCPathMPathrunPathexecPathlinetobeziertocurvetoverticalHorizontalhorizontalVertical DrawingAttr line_width font_props stroke_colour fill_colour standardAttr strokeAttrfillAttrtextAttr markHeighttextDimensionsthick ultrathickthinfontfacefontsize DrawingCtxM askDrawingCtxlocalCtxwithinModifiedCtx DRectangleLoc RectangleLoc DRectangle Rectangle rect_width rect_heightDPoint2TPoint2T DGraphicFGraphicFDGraphicGraphicccsupply drawGraphic drawGraphicUwrapGemptyGtextline straightLinestrokedRectanglefilledRectangle rectanglePath strokedCircle filledCircledisk positionWithdisphdispvdispgridborderwithinRectangleLocconnectS pathGraphicshortenshortenLshortenRmidpoint directionL directionRdotChardotTextdotHLinedotVLinedotXdotPlusdotCross dotDiamond dotFDiamonddotDisk dotSquare dotCircle dotPentagondotStar dotAsteriskdotOPlus dotOCross dotFOCrossTraceMtrace AConnector AFreeGraphicANodeAGraphicagDrawFagMakeFnodenodeAtliftAFGconnectconnect_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 CenterAnchor DotAnchorleftmidrightmidtopmid bottommidmidptblankHblankVvecMove moveAlignH moveAlignVinitialceilingiflooriIntersectionResult 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 pcurveAngstd_line_width thick_lineultra_thick_line thin_line rectangle shortenSegL shortenLineL shortenSegR shortenLineRlineDirectionLlineDirectionRcurveDirectionLcurveDirectionRPathF 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