q      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ -SafeTSafe9;Rectilinear 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.$A Boxed 3D object%A Boxed 2D object& A Box for containing a 3D object' A Box for containing a 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 :).iA triangle ((v1,n1),(v2,n2),(v3,n3)) has vertices v1, v2, v3 with corresponding normals n1, n2, and n3/8A triangle (a,b,c) = a triangle with vertices a, b and c0HA chain of line segments, as in SVG eg. [(0,0), (0.5,1), (1,0)] ---> /\@  !"#$%&'()*+,-./0123456789:;<=>9   "!#$%&'()*+,-./0213456789654738120/.-,+*)('&%$ !"#    !"#$%&'()*+,-./0123456789:;<=>SafeTThis 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.None9:<=T               SafeSafeTSafegetContour 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.SafeSafeTSafe   Safe!!!None"#$%& '()*+,"#$%&"#$%&&6None---NoneTABABABABNone ./0123456./ ./0123456NoneTCDEFGHCDEFGHCDEFGHCDEFGHSafe9:;<=?789789789Safe:;<=>::;<=>Safe?@?@?@ NoneABAAB!NoneFTCDEFGHIJKLMNOPQRSCDEFGHIJKLMNOPQRSCDEFGHIJKLMNOPQRSI0J0K0L0M0SafeM&Objects for our OpenSCAD-like languagen$Handles parsing arguments to moduleso]For actual argument entries: ArgParser (argument name) (default) (doc) (next Argparser...)p2For returns: ArgParserTerminator (return value)qJFor failure: ArgParserFailIf (test) (error message) (child for if true)5IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklTmnopqrstuvwxyz{|-IJKLMQPSRTNUOWVX`^Y[]\_Zabcedfghiljkmnostpqru-nopqrstmijklcdefghabXYZ[\]^_`MNOPQRSTUVWLKIJuIJKLM NOPQRSTUVWXYZ[\]^_`abcdefghijklTmnopqrstuvwxyz{|"Safe:DT UVWXYZ[\] UVWXYZ[\] UVWXYZ[\]W1X2#Safe$:DOT ^_`abcdefghij ^`abcdefghij ^_`abcdefghijSafe SafeDT9A in our programming openscad-like programming language.An assignment (parser)A function declaration (parser)An echo (parser)$None$9;OTk<We'd like to be able to turn OVals into a given Haskell typeklmnopqrstuvwxyz{|}kmlnopqrklmnopqrstuvwxyz{|}q2%None~~&NoneTApply arguments to an ArgParser argumentsArgParser to apply them to(result, error messages)'None$TSafeT3The distance a point p is from a line segment (a,b)Rounded Maximum Consider max(x,y) = 0, the generated curve has a square-like corner. We replace it with a quarter of a circleRounded minimum}Like rmax, but on a list instead of two. Just as maximum is. The implementation is to take the maximum two and rmax those.Like rmin but on a list./Pack the given objects in a box the given size.radiusfirst number to round maximumsecond number to round maximumresulting numberradiusfirst number to round minimumsecond number to round minimumresulting numberradiusnumbers to take round maximumresulting numberradiusnumbers to take round minimumresulting numberThe box to pack within"The space seperation between itemsObjects with their boxesAPacked objects with their positions, objects that could be packed(Safe9:;<=?)Safe9:;<=?*Safe9:;<=?T+SafeTSafe None9:;<=? None9:;<=?T None9;<=There is a discrete way to aproximate this object. eg. Aproximating a 3D object with a tirangle mesh would be DiscreteApproxable Obj3 TriangleMesh None:T  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  Safe9;<=?T Complement an Object Rounded unionRounded differenceRounded minimum9Translate an object by a vector of appropriate dimension.Scale an objectOutset of an object.Make a shell of an object.Get the bounding box an object'Get the implicit function for an object"Radius of the sphereResulting sphereRounding of cornersBottom.. cornerTop right... corner)Resuting cube - (0,0,0) is bottom left...Radius of the cylinderSecond radius of the cylinderHeight of the cylinderResulting cylinderRadius of the cylinderHeight of the cylinderResulting cylinderradius of the circleresulting circleBottom left cornerTop right corner(Resulting square (bottom right = (0,0) )Rouding of the polygonVerticies of the polygonResulting polygon ,None:T-NoneTNone:TNone9:;<=? )) ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~()*+                        !!"#$%&'()*+,-./0123456789:6;<=>?@ABCDEFGHIGHJKLMKNOKLPKQRSTUVWXYZ[\]^+_`abcd e f!g!h!7!i!j!k!l!m!n!o!p!q!r!s!t!u!vw"x"y"z"{"|"}"~""#############$$$$$$$$$$$$$$$$$$$%%%%%&&&&&&&&'''((((())  ,,,,,,,,,,,,,,,, ,,,,,,,,,,,,-------%implicit-0.1.0-KYTRCxapJ3vC9WM73ZZ5HJGraphics.Implicit.Definitions(Graphics.Implicit.Export.PolylineFormats,Graphics.Implicit.Export.TriangleMeshFormats)Graphics.Implicit.ExtOpenScad.Definitions)Graphics.Implicit.ExtOpenScad.Parser.Expr.Graphics.Implicit.ExtOpenScad.Parser.StatementGraphics.Implicit.MathUtilGraphics.Implicit.ObjectUtil%Graphics.Implicit.Export.SymbolicObj2%Graphics.Implicit.Export.SymbolicObj3*Graphics.Implicit.Export.DiscreteAproxableGraphics.Implicit.ExportGraphics.Implicit.PrimitivesGraphics.Implicit.ExtOpenScadGraphics.Implicit(Graphics.Implicit.Export.Render.GetLoops,Graphics.Implicit.Export.MarchingSquaresFill!Graphics.Implicit.Export.RayTrace+Graphics.Implicit.Export.Render.Definitions/Graphics.Implicit.Export.Render.HandlePolylines(Graphics.Implicit.Export.MarchingSquares-Graphics.Implicit.Export.Render.HandleSquares+Graphics.Implicit.Export.Render.Interpolate*Graphics.Implicit.Export.Symbolic.Rebound2*Graphics.Implicit.Export.Symbolic.Rebound3)Graphics.Implicit.Export.TextBuilderUtils2Graphics.Implicit.Export.NormedTriangleMeshFormats(Graphics.Implicit.Export.SymbolicFormatsGraphics.Implicit.Export.Util*Graphics.Implicit.Export.Render.RefineSegs'Graphics.Implicit.Export.Render.GetSegs.Graphics.Implicit.Export.Render.TesselateLoopsGraphics.Implicit.Export.Render)Graphics.Implicit.ExtOpenScad.Parser.Util)Graphics.Implicit.ExtOpenScad.Util.StateC'Graphics.Implicit.ExtOpenScad.Util.OVal'Graphics.Implicit.ExtOpenScad.Eval.Expr,Graphics.Implicit.ExtOpenScad.Util.ArgParser,Graphics.Implicit.ExtOpenScad.Eval.Statement$Graphics.Implicit.ObjectUtil.GetBox2$Graphics.Implicit.ObjectUtil.GetBox3)Graphics.Implicit.ObjectUtil.GetImplicit2)Graphics.Implicit.ObjectUtil.GetImplicit3(Graphics.Implicit.ExtOpenScad.Primitives%Graphics.Implicit.ExtOpenScad.Default Rectilinear3 Rectilinear2 SymbolicObj3Rect3RSphereCylinder Complement3UnionR3 DifferenceR3 IntersectR3 Translate3Scale3Rotate3Rotate3VOutset3Shell3EmbedBoxedObj3ExtrudeRExtrudeRotateR ExtrudeRM RotateExtrudeExtrudeOnEdgeOf SymbolicObj2RectRCirclePolygonR Complement2UnionR2 DifferenceR2 IntersectR2 Translate2Scale2Rotate2Outset2Shell2EmbedBoxedObj2 BoxedObj3 BoxedObj2Boxed3Boxed2Box3Box2Obj3Obj2NormedTriangleMesh TriangleMeshNormedTriangleTrianglePolyline⋯*⋯/ℕℝ3ℝ2ℝminℝ⋅$fComponentWiseMultable(,,)$fComponentWiseMultable(,) $fShow(->) $fShow(->)0 $fShow(->)1 $fShow(->)2$fShowSymbolicObj2$fShowSymbolicObj3svghacklabLaserGCodenormalstltoFloat float32LE binaryStljsTHREE TestInvariantEulerCharacteristicFStack VarLookupOVal OUndefinedOErrorOBoolONumOListOStringOFuncOModuleOObj3OObj2 StatementInclude:=EchoForIf NewModule ModuleCall DoNothing StatementIExprVarLitEListELamE:$PatternNameListPWildSymbol ArgParserAP APTerminatorAPFailIf APExampleAPTestAPBranch collector $fShowOVal$fEqOVal$fAlternativeArgParser$fMonadPlusArgParser$fMonadArgParser$fApplicativeArgParser$fFunctorArgParser $fShowPattern $fEqPattern$fShowTestInvariant $fShowExpr$fEqExpr$fShowStatement $fEqStatement$fShowStatementI$fEqStatementIExprIdxA0A1A2A3A4A5A6A7A8A9A10A11A12variableliteralexpr0exprN parseProgram computationsuite throwAwayinclude assignmentfunctionecho ifStatementI forStatementI userModuleuserModuleDeclarationmoduleArgsUnitmoduleArgsUnitDecl lineNumberdistFromLineSeg box3sWithinrmaxrmaximumrminimumpackgetBox2getBox3 getImplicit2 getImplicit3symbolicGetOrientedContoursymbolicGetContoursymbolicGetContourMeshsymbolicGetMeshDiscreteAproxable discreteAprox+$fDiscreteAproxableSymbolicObj2DynamicImage!$fDiscreteAproxableSymbolicObj2[]+$fDiscreteAproxableSymbolicObj3DynamicImage!$fDiscreteAproxableSymbolicObj3[]"$fDiscreteAproxableSymbolicObj3[]0 writeObject formatObjectwriteSVGwriteSTL writeBinSTLwriteOBJ writeTHREEJSwriteGCodeHacklabLaser writeSCAD3 writeSCAD2writePNG complementunionR differenceR intersectR translatescaleoutsetshellgetBox getImplicitimplicitsphererect3R cylinder2cylindercirclerectRpolygonRunion difference intersectextrudeRextrudeRotateR extrudeRM rotateExtrudeextrudeOnEdgeOfrotate3rotate3Vpack3rotatepack2$fObjectSymbolicObj3(,,)$fObjectSymbolicObj2(,) runOpenscad writePNG2 writePNG3getLoops getLoops'ComponentWiseMultablegetSquareTrianglesgetContourMeshColorSceneLightRayCameracolor dynamicImagevectorDistance colorMultaverage cameraRay rayFromTo rayBounds intersectionrefinerefine' intersectstraceRay TriSquareSqTris$fNFDataTriSquarecleanLoopsFromSegsjoinSegsreducePolylinepolylineNotNull getContourgetSquareLineSegsboth orderLinesDCmergedSquareTris squareToTri interpolateinterpolate_lininterpolate_binrebound2rebound3 toLazyTextbfbuildTruncFloatbuildInt<>baseGHC.Basememptymconcat#text-1.2.2.1-9Yh8rJoh8fO2JMLWffT3QsData.Text.Internal.BuilderBuilderData.Text.Internal.LazyText fromLazyTextData.Text.Lazyobjscad2scad3rad2deg callToken buildArgscall callNakedbuildS3buildS2 normTriangle normVertexcentroiddetail'detailsimplify simplify1getSegsgetSegs' tesselateLoop shrinkLoopgetMesh cleanupTrisinj1inj2inj3$**$$***$***$appABappBCappACmap2map2RmapR:@genSpacepad*<|>?:stringGS padStringtryMany variableSymbpatternMatcherStateC CompState getVarLookupmodifyVarLookup lookupVarpushValsgetValsputValswithPathShiftedBygetPath getRelPatherrorC mapMaybeM OTypeMirrorfromOObjtoOObjoTypeStr getErrors caseOType<||> divideObjs$fOTypeMirrorEither$fOTypeMirror(->)$fOTypeMirror(,,)$fOTypeMirror(,)$fOTypeMirror[]$fOTypeMirrorMaybe$fOTypeMirror[]0$fOTypeMirrorBool$fOTypeMirrorInteger$fOTypeMirrorDouble$fOTypeMirrorOValpatVarspatMatchmatchPatevalExpr evalExpr'argMapargumentdoc defaultToexampletesteulerCharacteristicargMap2 runStatementIrunSuiterunSuiteCapturerminisEmpty pointsBox unionBoxes outsetBoxgetDist2 writeObject'Object primitivescubesquarepolygondeg2radextrudeunit<|>moduleWithSuitemoduleWithoutSuiteaddObj3addObj2objMap objReduce obj2UpMap toIntervaldefaultObjectsdefaultConstantsdefaultFunctionsdefaultFunctions2defaultFunctionsSpecialdefaultModulesdefaultPolymorphicFunctions