t      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~- Safe-InferredNoneRectilinear 2D set Rectilinear 2D set A symbolic 3D format! A symbolic 2D object format. 5 We want to have a symbolic object so that we can  accelerate rendering & give ideal meshes for simple  cases. &Boxed 3D object 'Boxed 2D object ( A 3D box ) A 2D box * A 3D object + A 2D object ,8A normed triangle mesh is a bunch of normed trianlges!! -+A triangle mesh is a bunch of triangles :) .=A triangle ((v1,n1),(v2,n2),(v3,n3)) has vertices v1, v2, v3 - with corresponding normals n1, n2, and n3 /9A triangle (a,b,c) = a trinagle with vertices a, b and c 0$A chain of line segments, as in SVG  eg. [(0,0), (0.5,1), (1,0)] ---> /\ ;0Now for something that makes me a bad person...  I promise I'll use it for good, not evil!  I don')t want to reparse the program arguments 6 everytime I want to know if XML errors are needed. !Make ALL the functions Showable! D This is very handy when testing functions in interactive mode... @  !"#$%&'()*+,-./0123456789:;<=  !"#$%&'()*+,-./0123456789:;<=9876:345210/.-,+*)('&%$#"!  ;<  #"! $%&'()*+,-./0123456789:;<None=4The distance a point p is from a line segment (a,b) ?Rounded Maximum . Consider max(x,y) = 0, the generated curve 1 has a square-like corner. We replace it with a  quarter of a circle @Rounded minimum A)Like rmax, but on a list instead of two.  Just as maximum is. / The implementation is to take the maximum two  and rmax those. BLike rmin but on a list. =>?radius first number to round maximum second number to round maximum resulting number @radius first number to round minimum second number to round minimum resulting number Aradius numbers to take round maximum resulting number Bradius numbers to take round minimum resulting number CThe box to pack within #The space seperation between items Objects with their boxes BPacked objects with their positions, objects that could be packed =>?@ABC?@AB=C>=>?@ABC None3There is a discrete way to aproximate this object. 5 eg. Aproximating a 3D object with a tirangle mesh 5 would be DiscreteApproxable Obj3 TriangleMesh  None%Handles parsing arguments to modules  For failure: > ArgParserFailIf (test) (error message) (child for if true)  For returns: & ArgParserTerminator (return value) For actual argument entries: A ArgParser (argument name) (default) (doc) (next Argparser...) D'Objects for our OpenSCAD-like language 0DEFGHIJKLMN.DEFGHIJKLMN D NMLKJIHGFE NoneWe':d like to be able to turn OVals into a given Haskell type   NoneOOO NonePPPNoneQQQNoneRRRNoneOPQRPORQNoneNoneNoneNone:A in our programming openscad-like programming language. An assignment (parser) An echo (parser) None Apply arguments to an ArgParser  arguments ArgParser to apply them to (result, error messages)  None                  NoneNoneNone8getContour gets a polyline describe the edge of your 2D  object. It'1s really the only function in this file you need . to care about from an external perspective.  >This function gives line segments to divide negative interior D regions and positive exterior ones inside a square, based on its  values at its vertices. G It is based on the linearly-interpolated marching squares algorithm. !" #$%&!" #$%&None'8getContour gets a polyline describe the edge of your 2D  object. It'1s really the only function in this file you need . to care about from an external perspective. (>This function gives line segmensts to divde negative interior D regions and positive exterior ones inside a square, based on its  values at its vertices. G It is based on the linearly-interpolated marching squares algorithm. '(''(None)))None***None+,-+,-+,-None./012 345678./012./012None9:9:9:None;<=>?;<=>?;<=>? None@@@!NoneABCDEFABCDEFABCDEF"NoneGHIJGHIGIHJ#NoneKLMKKLM$NoneNONNO%NonePQRSTPPQRST&NoneUVWXUUVWX'NoneYZ[\]YZ[\]YZ[\](None^_^_^_)None`abcdefghijklmno`abcdefghijklmno`abcdefghijklmnoNone T;Translate an object by a vector of appropriate dimension. UScale an object VComplement an Object WRounded union XRounded minimum YRounded difference ZOutset an object. [Make a shell of an object. \Get the bounding box an object ](Get the implicit function for an object "ST9Vector to translate by (Also: a is a vector, blah, blah) Object to translate Resulting object UAmount to scale by Object to scale Resulting scaled object VObject to complement Result WThe radius of rounding objects to union Resulting object XThe radius of rounding Objects to intersect Resulting object YThe radius of rounding Objects to difference Resulting object Zdistance to outset object to outset resulting object [width of shell object to take shell of resulting shell \Object to get box of  Bounding box ]#Object to get implicit function of Implicit function ^Implicit function  Bounding box Resulting object _Radius of the sphere Resulting sphere `Rounding of corners Bottom.. corner Top right... corner *Resuting cube - (0,0,0) is bottom left... aRadius of the cylinder Second radius of the cylinder Height of the cylinder Resulting cylinder bcradius of the circle resulting circle dBottom left corner Top right corner )Resulting square (bottom right = (0,0) ) eRouding of the polygon Verticies of the polygon Resulting polygon fghijklmnopqrpq STUVWXYZ[\]^_`abcdefghijklmnopqr _`abcdefSTUVWXYZ[\]^ghijklmnopqrS TUVWXYZ[\]^_`abcdefghijklmnopqrpq*Nonersturstrstu+NonevwxvvwxNone s Resolution $File Format (Function that formats)  File Name Object to render Writing Action! t Resolution File Format writer  File Name Object to render Writing Action! u Resolution $File Format (Function that formats) Object to render Resulting lazy ByteString vwxyz{|}~ stuvwxyz{|}~ stuvwxyz{|}~ stuvwxyz{|}~,Noneyz{|}~yyz{|}~-NoneNone DEFGHIJKLMN DNMLKJIHGFENone !TUVWXY[^_`abcdfghijm!TUVgihWXY[jm_`cbadf^ ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq r s t u v w x y z { | } ~                                            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTRSUVWXVYZV[qVY\]^_`abc d!e!f!g!h!i!j"k"l"m"n#o#p#q$r$s%t%u%v%w%x&y&z&C&E''{'|'}'~(())>))))))))))))))****+++,,,,,,,,,,,,,,,,,,q,,,,,,,,,,-------implicit-0.0.3Graphics.Implicit.DefinitionsGraphics.Implicit.MathUtilGraphics.Implicit.ExtOpenScadGraphics.Implicit.ObjectUtilGraphics.Implicit.PrimitivesGraphics.Implicit.ExportGraphics.Implicit(Graphics.Implicit.Export.Render.GetLoops$Graphics.Implicit.Export.Definitions)Graphics.Implicit.ExtOpenScad.Definitions'Graphics.Implicit.ExtOpenScad.Util.OVal)Graphics.Implicit.ObjectUtil.GetImplicit2)Graphics.Implicit.ObjectUtil.GetImplicit3$Graphics.Implicit.ObjectUtil.GetBox2$Graphics.Implicit.ObjectUtil.GetBox3!Graphics.Implicit.Export.RayTrace)Graphics.Implicit.ExtOpenScad.Parser.Util)Graphics.Implicit.ExtOpenScad.Parser.Expr.Graphics.Implicit.ExtOpenScad.Parser.Statement,Graphics.Implicit.ExtOpenScad.Util.ArgParser)Graphics.Implicit.ExtOpenScad.Util.StateC'Graphics.Implicit.ExtOpenScad.Eval.Expr,Graphics.Implicit.ExtOpenScad.Eval.Statement(Graphics.Implicit.Export.MarchingSquares,Graphics.Implicit.Export.MarchingSquaresFill*Graphics.Implicit.Export.Symbolic.Rebound2*Graphics.Implicit.Export.Symbolic.Rebound3Graphics.Implicit.Export.Util)Graphics.Implicit.Export.TextBuilderUtils(Graphics.Implicit.Export.PolylineFormats,Graphics.Implicit.Export.TriangleMeshFormats2Graphics.Implicit.Export.NormedTriangleMeshFormats(Graphics.Implicit.Export.SymbolicFormats+Graphics.Implicit.Export.Render.Definitions+Graphics.Implicit.Export.Render.Interpolate.Graphics.Implicit.Export.Render.TesselateLoops-Graphics.Implicit.Export.Render.HandleSquares/Graphics.Implicit.Export.Render.HandlePolylines*Graphics.Implicit.Export.Render.RefineSegs'Graphics.Implicit.Export.Render.GetSegsGraphics.Implicit.Export.Render%Graphics.Implicit.Export.SymbolicObj2%Graphics.Implicit.Export.SymbolicObj3(Graphics.Implicit.ExtOpenScad.Primitives%Graphics.Implicit.ExtOpenScad.Default Rectilinear3 Rectilinear2 SymbolicObj3ExtrudeOnEdgeOf RotateExtrude ExtrudeRMExtrudeRotateRExtrudeREmbedBoxedObj3Shell3Outset3Rotate3VRotate3Scale3 Translate3 DifferenceR3 IntersectR3UnionR3 Complement3CylinderSphereRect3R SymbolicObj2EmbedBoxedObj2Shell2Outset2Rotate2Scale2 Translate2 IntersectR2 DifferenceR2UnionR2 Complement2PolygonRCircleRectR BoxedObj3 BoxedObj2Boxed3Boxed2Box3Box2Obj3Obj2NormedTriangleMesh TriangleMeshNormedTriangleTrianglePolylineM3M2ComponentWiseMultable⋯*⋯/ℕℝ3ℝ2ℝ⋅ xmlErrorOn errorMessagedistFromLineSeg box3sWithinrmaxrminrmaximumrminimumpackOValOObj2OObj3OModuleOFuncOStringOListONumOBoolOError OUndefined getImplicit2 getImplicit3getBox2getBox3Object translatescale complementunionR intersectR differenceRoutsetshellgetBox getImplicitimplicitsphererect3R cylinder2cylindercirclerectRpolygonRpolygonunion difference intersectextrudeR extrudeRM rotateExtrudeextrudeOnEdgeOfrotate3rotate3Vpack3rotatepack2 writeObject writeObject' formatObjectwriteSVGwriteSTL writeBinSTLwriteOBJ writeTHREEJSwriteGCodeHacklabLaser writeSCAD3 writeSCAD2writePNG runOpenscad writePNG2 writePNG3getLoops getLoops' $fShow(->)$fComponentWiseMultable(,,)$fComponentWiseMultable(,)DiscreteAproxable discreteAprox ArgParserAPFailIf APTerminatorAP TestInvariantEulerCharacteristicAPBranchAPTest APExampleFStack VarLookup Statement DoNothing ModuleCall NewModuleIfForEcho:=Include StatementIExpr:$LamEListELitEVarPattern:@WildListPNameSymbol collector $fShowOVal$fEqOVal OTypeMirrorAnyfromOObjtoOObjoTypeStr getErrors caseOType<||> divideObjs$fOTypeMirrorEither$fOTypeMirror(->)$fOTypeMirror(,,)$fOTypeMirror(,)$fOTypeMirror[]$fOTypeMirrorMaybe$fOTypeMirror[]0$fOTypeMirrorBool$fOTypeMirrorInt$fOTypeMirrorFloat$fOTypeMirrorOValisEmpty pointsBox unionBoxes outsetBoxgetDist2ColorSceneLightRayCameracolor dynamicImaged colorMultaverage cameraRay rayFromTo rayBounds intersectionrefinerefine' intersectstraceRay+$fDiscreteAproxableSymbolicObj2DynamicImage+$fDiscreteAproxableSymbolicObj3DynamicImagegenSpacepadtryMany variableSymbpatternMatchervariableliteral expression computation assignmentecho parseProgramsuite throwAwayinclude ifStatementI forStatementI userModuleuserModuleDeclarationmoduleArgsUnitmoduleArgsUnitDecl lineNumberargMapargumentdoc defaultToexampletesteulerCharacteristicargMap2$fMonadPlusArgParser$fMonadArgParserStateC CompState getVarLookupmodifyVarLookup lookupVarpushValsgetValsputValswithPathShiftedBygetPath getRelPatherrorC mapMaybeMpatVarspatMatchmatchPatevalExpr evalExpr' simplifyExpr runStatementIrunSuiterunSuiteCapture getContourgetSquareLineSegsboth getContour2 orderLinesreducePolyline orderLinesDCpolylineNotNullgetContourMeshgetSquareTrianglesrebound2rebound3 normTriangle normVertexcentroid toLazyTextbfbuildTruncFloatbuildInt<>base Data.Monoidmemptymconcat text-0.11.2.3Data.Text.Lazy.InternalTextData.Text.Lazy.BuilderBuilderData.Text.Lazy fromLazyTextsvghacklabLaserGCodenormalstl float32LE binaryStljsTHREEobjscad2scad3call buildArgsbuildS3buildS2 TriSquareTrisSq$fNFDataTriSquare interpolateinterpolate_lininterpolate_bin tesselateLoop shrinkLoopmergedSquareTrisisTris joinXaligned joinYaligned squareToTricleanLoopsFromSegsjoinSegsdetail'detailsimplify simplify1getSegsgetSegs'getMeshinj1inj2inj3$**$$***$***$appABappBCappACmap2map2RmapR$fObjectSymbolicObj3(,,)$fObjectSymbolicObj2(,)symbolicGetOrientedContoursymbolicGetContoursymbolicGetContourMesh!$fDiscreteAproxableSymbolicObj2[]symbolicGetMesh!$fDiscreteAproxableSymbolicObj3[]"$fDiscreteAproxableSymbolicObj3[]0 primitivescubesquaredeg2radextrudeunit<|>moduleWithSuitemoduleWithoutSuiteaddObj3addObj2objMap objReduce obj2UpMap toIntervaldefaultObjectsdefaultConstantsdefaultFunctionsdefaultFunctions2defaultFunctionsSpecialdefaultModulesdefaultPolymorphicFunctions