Gё      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-None !"34579>@INNone !"34579>@INRectilinear 2D setRectilinear 2D setA symbolic 3D format!A symbolic 2D object format. 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.7A normed triangle mesh is a bunch of normed trianlges!!/*A triangle mesh is a bunch of triangles :)0iA triangle ((v1,n1),(v2,n2),(v3,n3)) has vertices v1, v2, v3 with corresponding normals n1, n2, and n318A triangle (a,b,c) = a trinagle with vertices a, b and c2HA chain of line segments, as in SVG eg. [(0,0), (0.5,1), (1,0)] ---> /\=Now 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 everytime I want to know if XML errors are needed.B  !"#$%&'()*+,-./0123456789:;<=>?@A?  !"#$%&'()*+,-./0123456789:;<=>B;:98<567A@43210/.-,+*)('& !"#$% =>?  !"#$%&'()*+,-./0123456789:;<=>?@ANone !"34579>@INB3The distance a point p is from a line segment (a,b)DRounded Maximum Consider max(x,y) = 0, the generated curve has a square-like corner. We replace it with a quarter of a circleERounded minimumF}Like rmax, but on a list instead of two. Just as maximum is. The implementation is to take the maximum two and rmax those.GLike rmin but on a list.BCDradiusfirst number to round maximumsecond number to round maximumresulting numberEradiusfirst number to round minimumsecond number to round minimumresulting numberFradiusnumbers to take round maximumresulting numberGradiusnumbers to take round minimumresulting numberHThe box to pack within"The space seperation between itemsObjects with their boxesAPacked objects with their positions, objects that could be packedBCDEFGHDEFGBHCBCDEFGH None !"34579>@INThere is a discrete way to aproximate this object. eg. Aproximating a 3D object with a tirangle mesh would be DiscreteApproxable Obj3 TriangleMesh None !"34579>@IN$Handles parsing arguments to modules]For actual argument entries: ArgParser (argument name) (default) (doc) (next Argparser...)2For returns: ArgParserTerminator (return value)JFor failure: ArgParserFailIf (test) (error message) (child for if true)I&Objects for our OpenSCAD-like language0IJKLMNOPQRS.IJKLMNOPQRS I JKLMNOPQRS None !"34579>@IN<We'd like to be able to turn OVals into a given Haskell type  None !"34579>@INTTT None !"34579>@INUUUNone !"34579>@INVVVNone !"34579>@INWWWNone !"34579>@INTUVWUTWVNone !"34579>@INNone !"34579>@IN  None !"34579>@INNone !"34579>@IN9A in our programming openscad-like programming language.An assignment (parser)An echo (parser)None !"34579>@INApply arguments to an ArgParser       argumentsArgParser to apply them to(result, error messages)           None !"34579>@IN  !  !  !None !"34579>@IN"#$%&'$%"#$%&'None !"34579>@IN()*()*()*None !"34579>@IN+getContour gets a polyline describe the edge of your 2D object. It's 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 regions and positive exterior ones inside a square, based on its values at its vertices. It is based on the linearly-interpolated marching squares algorithm.-+.,/012+-+.,/012None !"34579>@IN3getContour gets a polyline describe the edge of your 2D object. It's really the only function in this file you need to care about from an external perspective.4This function gives line segmensts to divde negative interior regions and positive exterior ones inside a square, based on its values at its vertices. It is based on the linearly-interpolated marching squares algorithm.34334None !"34579>@IN555None !"34579>@IN666None !"34579>@IN789789789None !"34579>@IN:;<=> ?@ABCD:;<=>:;<=>>None !"34579>@INEFEFEFNone !"34579>@INGHIJKGHIJKGHIJK None !"34579>@INLLL!None !"34579>@INMNOPQRMNOPQRMNOPQR"None !"34579>@INSTUVSTUSTUV#None !"34579>@INWXYWWXY$None !"34579>@INZ[ZZ[%None !"34579>@IN\]^_`\\]^_`&None !"34579>@INabcdaabcd'None !"34579>@INefghiefghiefghi(None !"34579>@INjkjkjk)None !"34579>@INlmnopqrstuvwxyz{lmnopqrstuvwxyz{lmnopqrstuvwxyz{qrstuNone !"34579>@IN Y:Translate an object by a vector of appropriate dimension. ZScale an object[Complement an Object\ Rounded union]Rounded minimum^Rounded difference_Outset an object.`Make a shell of an object.aGet the bounding box an objectb'Get the implicit function for an object"XY8Vector to translate by (Also: a is a vector, blah, blah)Object to translateResulting objectZAmount to scale byObject to scaleResulting scaled object [Object to complementResult\The radius of roundingobjects to unionResulting object]The radius of roundingObjects to intersectResulting object^The radius of roundingObjects to difference Resulting object_distance to outsetobject to outsetresulting object`width of shellobject to take shell ofresulting shellaObject to get box of Bounding boxb"Object to get implicit function ofImplicit functioncImplicit function Bounding boxResulting objectdRadius of the sphereResulting sphereeRounding of cornersBottom.. cornerTop right... corner)Resuting cube - (0,0,0) is bottom left...fRadius of the cylinder Second radius of the cylinderHeight of the cylinderResulting cylinderghradius of the circleresulting circleiBottom left cornerTop right corner(Resulting square (bottom right = (0,0) )jRouding of the polygonVerticies of the polygonResulting polygonklmnopqrstuvwxy XYZ[\]^_`abcdefghijklmnopqrstuvw"defghijkXYZ[\]^_`abcyxlmnopqrstuvwX YZ[\]^_`abcdefghijklmnopqrstuvwxy*None !"34579>@IN|}~|}~|}~+None !"34579>@INNone !"34579>@IN z Resolution#File Format (Function that formats) File NameObject to renderWriting Action!{ ResolutionFile Format writer File NameObject to renderWriting Action!| Resolution#File Format (Function that formats)Object to renderResulting lazy ByteString}~ z{|}~ z{|}~ z{|}~,None !"34579>@IN-None !"34579>@INNone !"34579>@IN IJKLMNOPQRS IJKLMNOPQRSNone !"34579>@IN !YZ[\]^`cdefghiklmnor!YZ[lnm\]^`ordehgfikc ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv w x y z { | } ~                                                !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`^_abcdbefbegbhvijklmno p!q!r!s!t!u!v"w"x"y"z#{#|#}$~$%%%%%&&&O&Q'''''(())J))))))))))))))****+++,,,,,,,,,,,,,,,,,,v,,,,,,,,,,-------impli_E1IkROAWGYy6lRoDebQN7BGraphics.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 SymbolicObj3Rect3RSphereCylinder Complement3UnionR3 IntersectR3 DifferenceR3 Translate3Scale3Rotate3Rotate3VMirror3Outset3Shell3EmbedBoxedObj3ExtrudeRExtrudeRotateR ExtrudeRM RotateExtrudeExtrudeOnEdgeOf SymbolicObj2RectRCirclePolygonR Complement2UnionR2 DifferenceR2 IntersectR2 Translate2Scale2Rotate2Mirror2Outset2Shell2EmbedBoxedObj2 BoxedObj3 BoxedObj2Boxed3Boxed2Box3Box2Obj3Obj2NormedTriangleMesh TriangleMeshNormedTriangleTrianglePolylineM3M2ComponentWiseMultable⋯*⋯/ℕℝ3ℝ2ℝ⋅ xmlErrorOn errorMessage $fShow(->)$fComponentWiseMultable(,,)$fComponentWiseMultable(,)distFromLineSeg box3sWithinrmaxrminrmaximumrminimumpackOVal OUndefinedOErrorOBoolONumOListOStringOFuncOModuleOObj3OObj2 getImplicit2 getImplicit3getBox2getBox3Object translatescale complementunionR intersectR differenceRoutsetshellgetBox getImplicitimplicitsphererect3R cylinder2cylindercirclerectRpolygonRpolygonunion difference intersectextrudeR extrudeRM rotateExtrudeextrudeOnEdgeOfrotate3rotate3Vpack3rotatepack2$fObjectSymbolicObj3(,,)$fObjectSymbolicObj2(,) writeObject writeObject' formatObjectwriteSVGwriteSTL writeBinSTLwriteOBJ writeTHREEJSwriteGCodeHacklabLaser writeSCAD3 writeSCAD2writePNG runOpenscad writePNG2 writePNG3getLoops getLoops'DiscreteAproxable discreteAprox ArgParserAP APTerminatorAPFailIf TestInvariantEulerCharacteristic APExampleAPTestAPBranchFStack VarLookup StatementInclude:=EchoForIf NewModule ModuleCall DoNothing StatementIExprVarLitEListELamE:$PatternNameListPWild:@Symbol 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+$fDiscreteAproxableSymbolicObj3DynamicImagegenSpacepad*<|>?:stringGS padStringtryMany variableSymbpatternMatchervariableliteralexpr0exprN computation assignmentecho parseProgramsuite throwAwayinclude ifStatementI forStatementI userModuleuserModuleDeclarationmoduleArgsUnitmoduleArgsUnitDecl lineNumberargMapargumentdoc defaultToexampletesteulerCharacteristicargMap2$fMonadPlusArgParser$fMonadArgParser$fApplicativeArgParser$fFunctorArgParser$fAlternativeArgParserStateC CompState getVarLookupmodifyVarLookup lookupVarpushValsgetValsputValswithPathShiftedBygetPath getRelPatherrorC mapMaybeMpatVarspatMatchmatchPatevalExpr evalExpr' simplifyExpr runStatementIrunSuiterunSuiteCapture getContourgetSquareLineSegsboth getContour2 orderLinesreducePolyline orderLinesDCpolylineNotNullgetContourMeshgetSquareTrianglesrebound2rebound3 normTriangle normVertexcentroid toLazyTextbfbuildTruncFloatbuildInt<>baseGHC.Basememptymconcattext_1l1AN4I48k37RaQ6fm6CEhData.Text.Internal.LazyTextData.Text.Internal.BuilderBuilder fromLazyTextData.Text.LazysvghacklabLaserGCodenormalstl float32LE binaryStljsTHREEobjscad2scad3call buildArgsbuildS3buildS2 TriSquareSqTris$fNFDataTriSquare interpolateinterpolate_lininterpolate_bin tesselateLoop shrinkLoopmergedSquareTrisisTris joinXaligned joinYaligned squareToTricleanLoopsFromSegsjoinSegsdetail'detailsimplify simplify1getSegsgetSegs'getMeshinj1inj2inj3$**$$***$***$appABappBCappACmap2map2RmapRsymbolicGetOrientedContoursymbolicGetContoursymbolicGetContourMesh!$fDiscreteAproxableSymbolicObj2[]symbolicGetMesh!$fDiscreteAproxableSymbolicObj3[]"$fDiscreteAproxableSymbolicObj3[]0 primitivescubesquaredeg2radextrudeunit<|>moduleWithSuitemoduleWithoutSuiteaddObj3addObj2objMap objReduce obj2UpMap toIntervaldefaultObjectsdefaultConstantsdefaultFunctionsdefaultFunctions2defaultFunctionsSpecialdefaultModulesdefaultPolymorphicFunctions