;      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~- Safe-Inferred !"23468=?HMNone !"23468=?HMRectilinear 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 !"23468=?HMB3The 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 !"23468=?HMThere is a discrete way to aproximate this object. eg. Aproximating a 3D object with a tirangle mesh would be DiscreteApproxable Obj3 TriangleMesh None !"23468=?HM$Handles parsing arguments to modulesJFor failure: ArgParserFailIf (test) (error message) (child for if true)2For returns: ArgParserTerminator (return value)]For actual argument entries: ArgParser (argument name) (default) (doc) (next Argparser...)I&Objects for our OpenSCAD-like language0IJKLMNOPQRS.IJKLMNOPQRS I SRQPONMLKJ None !"23468=?HM<We'd like to be able to turn OVals into a given Haskell type  None !"23468=?HMTTT None !"23468=?HMUUUNone !"23468=?HMVVVNone !"23468=?HMWWWNone !"23468=?HMTUVWUTWVNone !"23468=?HMNone !"23468=?HM  None !"23468=?HMNone !"23468=?HM9A in our programming openscad-like programming language.An assignment (parser)An echo (parser)None !"23468=?HMApply arguments to an ArgParser       argumentsArgParser to apply them to(result, error messages)           None !"23468=?HM  !  !  !None !"23468=?HM"#$%&'$%"#$%&'None !"23468=?HM()*()*()*None !"23468=?HM+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 !"23468=?HM3getContour 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 !"23468=?HM555None !"23468=?HM666None !"23468=?HM789789789None !"23468=?HM:EThe memory management overhead. Currently this is tuned for GHC only.;:<=>?@ ABCDEF<=>?@;:<=>?@@None !"23468=?HMGHGHGHNone !"23468=?HMIJKLMIJKLMIJKLM None !"23468=?HMNNN!None !"23468=?HMOPQRSTOPQRSTOPQRST"None !"23468=?HMUVWXUVWUWVX#None !"23468=?HMYZ[YYZ[$None !"23468=?HM\]\\]%None !"23468=?HM^_`ab^^_`ab&None !"23468=?HMcdefccdef'None !"23468=?HMghijkghijkghijk(None !"23468=?HMlmlmlm)None !"23468=?HMnopqrstuvwxyz{|}nopqrstuvwxyz{|}nopqrstuvwxyz{|}stuvwNone !"23468=?HM 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 !"23468=?HM~~~+None !"23468=?HMNone !"23468=?HM 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 !"23468=?HM-None !"23468=?HMNone !"23468=?HM IJKLMNOPQRS ISRQPONMLKJNone !"23468=?HM !YZ[\]^`cdefghiklmnor!YZ[lnm\]^`ordehgfikc ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv w x y z { | } ~                                                !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab`acdefdghdgidjvklmnopq r!s!t!u!v!w!x"y"z"{"|#}#~#$$%%%%%&&&O&Q'''''(())J))))))))))))))****+++,,,,,,,,,,,,,,,,,,v,,,,,,,,,,-------implicit-0.0.5Graphics.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 ExtrudeRMExtrudeRotateRExtrudeREmbedBoxedObj3Shell3Outset3Mirror3Rotate3VRotate3Scale3 Translate3 DifferenceR3 IntersectR3UnionR3 Complement3CylinderSphereRect3R SymbolicObj2EmbedBoxedObj2Shell2Outset2Mirror2Rotate2Scale2 Translate2 IntersectR2 DifferenceR2UnionR2 Complement2PolygonRCircleRectR BoxedObj3 BoxedObj2Boxed3Boxed2Box3Box2Obj3Obj2NormedTriangleMesh TriangleMeshNormedTriangleTrianglePolylineM3M2ComponentWiseMultable⋯*⋯/ℕℝ3ℝ2ℝ⋅ xmlErrorOn errorMessage $fShow(->)$fComponentWiseMultable(,,)$fComponentWiseMultable(,)distFromLineSeg box3sWithinrmaxrminrmaximumrminimumpackOValOObj2OObj3OModuleOFuncOStringOListONumOBoolOError OUndefined 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 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+$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 chunkOverheaddefaultChunkSize toLazyTextbfbuildTruncFloatbuildInt<>base Data.Monoidmemptymconcat text-1.2.1.3Data.Text.Internal.LazyTextData.Text.Internal.BuilderBuilder fromLazyTextData.Text.LazysvghacklabLaserGCodenormalstl float32LE binaryStljsTHREEobjscad2scad3call buildArgsbuildS3buildS2 TriSquareTrisSq$fNFDataTriSquare interpolateinterpolate_lininterpolate_bin tesselateLoop shrinkLoopmergedSquareTrisisTris joinXaligned joinYaligned squareToTricleanLoopsFromSegsjoinSegsdetail'detailsimplify simplify1getSegsgetSegs'getMeshinj1inj2inj3$**$$***$***$appABappBCappACmap2map2RmapRsymbolicGetOrientedContoursymbolicGetContoursymbolicGetContourMesh!$fDiscreteAproxableSymbolicObj2[]symbolicGetMesh!$fDiscreteAproxableSymbolicObj3[]"$fDiscreteAproxableSymbolicObj3[]0 primitivescubesquaredeg2radextrudeunit<|>moduleWithSuitemoduleWithoutSuiteaddObj3addObj2objMap objReduce obj2UpMap toIntervaldefaultObjectsdefaultConstantsdefaultFunctionsdefaultFunctions2defaultFunctionsSpecialdefaultModulesdefaultPolymorphicFunctions