h&<      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                     4 Safe-Inferred . implicit/A type serving to enumerate our output formats.implicitDefault 2D output formatimplicitDefault 3D output formatimplicitAll supported 2D formatsimplicitTrue for 2D capable simplicitAll supported 3D formatsimplicitTrue for 3D capable simplicit1A list mapping file extensions to output formats.implicitLookup an output format for a given output file. Throw an error if one cannot be found.implicit:Try to look up an output format from a supplied extension.implicitGet filename extension for implicit/A Read instance for our output format. Used by auto in our command line parser. Reads a string, and evaluates to the appropriate OutputFormat.   Safe-Inferred implicitThe goal of getLoops is to extract loops from a list of segments. The input is a list of segments. The output a list of loops, where each loop is a list of segments, which each piece representing a "side".For example: Given points [[1,2],[5,1],[2,3,4,5], ... ] notice that there is a loop 1,2,3,4,5...  repeat But we give the output [ [ [1,2], [2,3,4,5], [5,1] ], ... ] so that we have the loop, and also knowledge of how the list is built (the "sides" of it).implicit=We will be actually doing the loop extraction with getLoops'getLoops' has a first argument of the segments as before, but a *second argument* which is the loop presently being built.1so we begin with the "building loop" being empty. see also: .implicitinputimplicit accumulatorimplicitlast element in the accumulator Safe-Inferred")implicitConsume whitespace.implicitMatch the module keyword.implicitMatch the function keyword.implicitMatch the if keyword.implicitMatch the else keyword.implicitMatch the let keyword.implicitMatch the each keyword.implicitMatch boolean true.implicitMatch boolean falseimplicitMatch the undef keyword.implicitMatch the include keyword.implicitMatch the use keyword.implicit6match a single character token followed by whitespace.implicitmatch a colon.implicitmatch a semicolon.implicitmatch a comma.implicitMatch operators.implicit!match something between two ends.implicitmatch an identifier. variable name, function name, module name, etc. Safe-Inferred!  Safe-Inferred"$# Safe-Inferred;=$'implicit A triple of s. When used as a volume or position vector, measured in millimeters cubed. When used as a rotation, interpreted as Euler angles measured in radians.(implicitA pair of two s. When used as an area or position vector, measured in millimeters squared.)implicitA type synonym for . When used in the context of positions or sizes, measured in units of millimeters. When used as in the context of a rotation, measured in radians..implicitA symbolic 3D format!9implicitA symbolic 2D object format. We want to have symbolic objects so that we can accelerate rendering & give ideal meshes for simple cases.implicit%A type whose show instance is a hole _. Used for giving  instances to data types which contain functions or other unshowable things.CimplicitMeans of constructing symbolic objects that are common between the 2D and 3D case. This type is parameterized on obj and vec so that 9 and .+ can instantiate it for their own purposes.DimplicitThe empty objectEimplicitThe entirely full objectLimplicit / FIXME: May not be empty. expose to type system.himplicit5Add multiply and divide operators for two B2s or B3s.kimplicitA give up point for dividing Bs, and for the maximum difference between abs(n) and abs(-n).limplicit*Convert from our Integral to our Rational.mimplicit+Convert from our Fast Integer (int32) to B.nimplicit;Convert from our rational to a float, for output to a file.implicitImplicitCAD uses the pattern Either a (b -> c) for many of its higher-order arguments. The left case is for constant values, but the right side is for things that should vary. Since we can't show functions, ths combinator works like  except that it shows the left case and uses a hole for the right.rimplicit Convert a ! to its constituent euler angles.From https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Source_code_2simplicit;Returns True if any component of a foldable functor is zeroimplicit Monoid under .implicitSemigroup under .implicit Monoid under .implicitSemigroup under . !"#$%&'()*+,-./0123457689:;<=>?@ABCDEFHOILMKNJGPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs !"#$)('%&khijefgcdab_`\]^YZ[XWVUTSRQCDEFHOILMKNJGP9:;<=>?./012345768*+,-@ABolmnpqrs2 Safe-Inferred"/8$Simplicit>Options changing the behavior of the extended OpenScad engine.implicitAn individual message.implicitThe types of messages the execution engine can send back to the application.implicitIn order to not propagate Parsec or other modules around, create our own source position type for the AST.implicit&Objects for our OpenSCAD-like languageimplicitA statement, along with the line, column number, and file it is found at.implicitAn expression.implicit-Handles parsing arguments to built-in modulesimplicitFor actual argument entries: 6AP (argument name) (default) (doc) (next Argparser...)implicit For returns: APTerminator (return value)implicit For failure: APFail (error message)implicitAn example, then nextimplicitA string to run as a test, then invariants for the results, then nextimplicitA branch where there are a number of possibilities for the parser underneathimplicitThe state of computation.implicit"A hash of variables and functions.implicit,The result of geometry generating functions.implicit(The path we are looking for includes in.implicitFor programs using this API to perform variable lookups, after execution of an escad has completed. Safe-Inferred&PimplicitPerform a variable lookup FIXME: generate a warning when we look up a variable that is not present.implicit"Pure the path stored in the state.  Safe-Inferred"(2&2 Safe-Inferred"(implicitBuilds an argparser for the type that is expected from it. FIXME: make a version of this that accepts multiple symbol names, so we can have h= and height=implicitInline documentation.implicitAn inline default value.implicitAn inline example.implicitInline test and combinators.implicitApply arguments to an ArgParserimplicit argumentsimplicitArgParser to apply them toimplicit(result, error messages)  Safe-Inferred"* implicitA pattern parserimplicitParse a number.implicitParse a variable reference. NOTE: abused by the parser for function calls.implicitParse a true or false value.implicit$Parse a quoted string. FIXME: no u unicode support? 12 Safe-Inferred"-implicitparse expressions that don't associate, either because they are not operators or because they are operators that contain the expressions they operate on in start and end tokens, like parentheses, and no other operator can associate with their expressions.implicitparse operations that start with a variable name, including variable reference, function calling, variable list indexing, and variable list splicing.implicit>Parse parentheses, lists, vectors, and vector/list generators.implicitApply a symbolic operator to a list of expressions, pureing one big expression. Accepts a string for the operator, to simplify callers.implicitApply a symbolic operator to two expressions, combining left and right operands with an binary operatorimplicit5An assignment expression within a let's bindings listimplicit)build nested let statements when foldr'd. Safe-Inferred2implicitall of the token parsers are lexemes which consume all trailing spaces nicely. | This leaves us to deal only with the first spaces in the file.implicitA computable block of code in our openscad-like programming language.implicit*A suite of s! What's a suite? Consider:%union() { sphere(3); }The suite was in the braces ({}). Similarily, the following has the same suite:union() sphere(3);We consider it to be a list of computables which are in turn StatementI s.implicitEvery StatementI requires a source position, thus we can build a combinator.implicitCommenting out a computation: use % or * before the statement, and it will not be run.implicit>An include! Basically, inject another extopenscad file here...implicitAn assignment (parser)implicitA function declaration (parser)implicitAn if statement (parser)implicitparse a call to a module.implicitdeclare a module.implicit'parse the arguments passed to a module.implicit.parse the arguments in the module declaration.implicit6Find the source position. Used when generating errors.implicit"Remove statements that do nothing.! Safe-Inferred"4implicit6The names of all of the patterns in the given pattern.implicitMatch patterns and ovals, returning a list of all of the OVals matched.implicitConstruct a VarLookup from the given Pattern and OVal, if possible.implicitThe entry point from StateC. evaluates an expression, pureing the result, and moving any error messages generated into the calling StateC." Safe-Inferred"5 implicit(Run statements out of the OpenScad file.# Safe-Inferred5K$ Safe-Inferred6 implicitSerialize a value as a single precision float with an exponent attached.implicit*Serialize a float with four decimal places  Safe-Inferred"7FimplicitRemoves triangles that are empty when converting their positions to Float resolution.implicit%Generate an STL file is ASCII format.implicitconvert from B to Float.implicit+Generate an STL file in it's binary format.% Safe-Inferred8*implicitSlightly stretch the bounding box of an object, in order to ensure that during mesh generation, there are no problems because values are right at the edge.& Safe-Inferred9implicitSlightly stretch the bounding box of an object, in order to ensure that during mesh generation, there are no problems because values are right at the edge.' Safe-Inferred; implicitThe purpose of refine is to add detail to a polyline aproximating the boundary of an implicit function and to remove redundant points. We break this into two steps: detail and then simplify.implicitWe wrap detail to make it ignore very small segments, and to pass in an initial value for a depth counter argument. FIXME: magic number.implicitdetail adds new points to a polyline to add more detail. FIXME: all of the magic numbers.( Safe-Inferred;4) Safe-Inferred;implicitJoin polylines that connect.implicitSimplify and sort a polyline.* Safe-Inferred;+ Safe-Inferred<, Safe-Inferred<5- Safe-Inferred<`. Safe-Inferred>Fimplicit.A colour. Red Green Blue and Alpha components.implicit,A light source. source point, and intensity.implicitA ray. A point, and a normal pointing in the direction the ray is going.implicitThe distance traveled by a line segment from the first point to the second point.implicit"Multiply a colour by an intensity.implicitAverage a set of colours.implicitCreate a ray from two points.   Safe-Inferred"?|implicit0DXF2 export in 2D. conforming to AutoCAD R12/13.implicitGcode generation for the laser cutter in HackLab. Complies with  Generate a .obj format file from a NormedTriangleMesh see: 1https://en.wikipedia.org/wiki/Wavefront_.obj_file  Safe-Inferred(G implicit3The distance a point p is from a line segment (a,b)implicitRounded Maximum Consider max(x,y) = 0, the generated curve has a square-like corner. We replace it with a quarter of a circleNOTE: rmax is not associative!implicitRounded minimumNOTE: rmin is not associative!implicitLike rmax, but on a list instead of two. Just as maximum is. The implementation is to take the maximum two and rmax those.implicitLike rmin but on a list.implicit/Pack the given objects in a box the given size.implicitReflect a vector across a hyperplane defined by its normal vector.From https://en.wikipedia.org/wiki/Reflection_(mathematics)#Reflection_through_a_hyperplane_in_n_dimensionsimplicitLift a function over  into a function over '.implicitHaskell's standard library doesn't make floating-point infinity available in any convenient way, so we define it here.implicitradiusimplicitfirst number to round maximumimplicitsecond number to round maximumimplicitresulting numberimplicitradiusimplicitfirst number to round minimumimplicitsecond number to round minimumimplicitresulting numberimplicitradiusimplicitnumbers to take round maximumimplicitresulting numberimplicitradiusimplicitnumbers to take round minimumimplicitresulting numberimplicitThe box to pack withinimplicit"The space seperation between itemsimplicitObjects with their boxesimplicitPacked objects with their positions, objects that could be packedimplicit Mirror axisimplicitVector to transform    Safe-Inferred (_{"implicitOperations available on both 2D and 3D objects. The obvious omission of rotation operations from this class are a technical limitation, and are instead provided by  and .Library users shouldn't need to provide new instances of this class.implicitType representing a space this object belongs to. V3 for 3D objects, V2 for 2DimplicitA  for including Cs in obj. Prefer using  instead of this.implicitGet the bounding box an objectimplicit'Get the implicit function for an objectimplicitCanonicalization function used to rewrite / normalize abstract syntax tree representing an objectimplicitThe object that fills no spaceimplicit&The object that fills the entire spaceimplicit'Get the implicit function for an objectimplicitA pattern that abstracts over ? and 8.implicitA rectangular prismimplicitA cubeimplicitA conical frustum --- ie. a cylinder with different radii at either end.implicit A rectangleimplicitA squareimplicit A 2D polygonimplicit9Translate an object by a vector of appropriate dimension.implicitScale an objectimplicitComplement an ObjectimplicitSet the current object-rounding value for the given object. The rounding value is measured in units of distance, and describes the radius of rounded corners.This can be used to change the shape of more primitive forms, for example, we can make a cube with rounded corners via withRounding 5 ( True 20). r obj applies the rounding r all primitives objects in obj, so long as they have the same dimensionality. That is to say, the current object-rounding value set in 3D will not apply to extruded 2D shapes.implicitMirror an object across the hyperplane whose normal is a given vector.implicitOutset of an object.implicitMake a shell of an object.implicit Rounded unionimplicitRounded differenceimplicitRounded minimumimplicitExtrude a 2d object upwards. The current object-rounding value set by = is used to round the caps, but is not used by the 2D object.implicit)The current object-rounding value set by > is used to round the caps, but is not used by the 2D object.implicitRotate a 3D object via an Euler angle, measured in radians, along the world axis.implicit+Rotate a 3D object along an arbitrary axis.implicitTransform a 3D object using a 4x4 matrix representing affine transformation (OpenSCAD multmatrix)implicit;Attempt to pack multiple 3D objects into a fixed area. The z coordinate of each object is dropped, and the resulting packed objects will all be on the same plane.FIXME: shouldn't this pack into a 3d area, or have a 3d equivalent?implicitTransform a 2D object using a 3x3 matrix representing affine transformation (OpenSCAD multmatrix)implicit6Attempt to pack multiple 2D objects into a fixed area.implicitObject to get box ofimplicit Bounding boximplicit"Object to get implicit function ofimplicitImplicit functionimplicit"Object to get implicit function ofimplicitImplicit functionimplicitRadius of the sphereimplicitResulting sphereimplicitBottom.. cornerimplicitTop right... cornerimplicit Resuting cubeimplicit Centered?implicitSizeimplicit)Resuting cube. (0,0,0) is bottom left if center = False, otherwise it's the center.implicitRadius of the cylinderimplicitSecond radius of the cylinderimplicitHeight of the cylinderimplicitResulting cylinderimplicitRadius of the cylinderimplicitHeight of the cylinderimplicitResulting cylinderimplicitRadius of the cylinderimplicitHeight of the cylinderimplicitResulting cylinderimplicitradius of the circleimplicitresulting circleimplicitBottom left cornerimplicitTop right cornerimplicitResulting squareimplicit Centered?implicitSizeimplicit(Resulting square (bottom right = (0,0) )implicitVerticies of the polygonimplicitResulting polygonimplicitVector to translate byimplicitObject to translateimplicitResulting objectimplicitAmount to scale byimplicitObject to scaleimplicitResulting scaled objectimplicitObject to complementimplicitResultimplicitVector defining the hyperplaneimplicitObject to mirrorimplicitResulting objectimplicitdistance to outsetimplicitobject to outsetimplicitresulting objectimplicitwidth of shellimplicitobject to take shell ofimplicitresulting shellimplicitThe radius (in mm) of roundingimplicitobjects to unionimplicitResulting objectimplicitThe radius (in mm) of roundingimplicit Base objectimplicit!Objects to subtract from the baseimplicitResulting objectimplicitThe radius (in mm) of roundingimplicitObjects to intersectimplicitResulting objectimplicitImplicit functionimplicit Bounding boximplicitResulting objectimplicitExtrusion heightimplicittwistimplicitscaleimplicit translateimplicitobject to extrudeimplicitheight to extrude toimplicitAngle to sweep to (in rad)implicit translateimplicitrotateimplicitobject to extrudeimplicitAngle of rotationimplicitAxis of rotationimplicit Area to packimplicitSeparation between objectsimplicitObjects to packimplicit3 if the objects could be packed into the given areaimplicit Area to packimplicitSeparation between objectsimplicitObjects to packimplicit3 if the objects could be packed into the given area00  Safe-Inferred`a/ Safe-Inferred`0 Safe-Inferred)*aimplicit.Normalize a dimensionality-polymorphic vector.1 Safe-Inferrede implicitAd-hoc methods we need to share code between 2D and 3D. With the exception of , these are actually all standard methods of other classes, which we don't have access to due to the choice representation for R2 and R3.7This class is unnecessary if we were to implement #283.implicitEquivalent to implicitEquivalent to implicitEquivalent to implicit8Given a bounding box, produce the points at each corner.implicitCompute the intersection of dimensionality-polymorphic bounding boxes.implicitApply two functions elementwise across pairs. This is the biapplicative operation specialized to pairs.implicit An empty box.implicit A full box.implicit,Define a box around all of the given points.implicitCompute the intersection of dimensionality-polymorphic bounding boxes.implicitIs a box empty?implicit*Increase a boxes size by a rounding value. 2 Safe-Inferred(fXimplicitFilter out equal consecutive elements in the list. This function will additionally trim the last element of the list if it's equal to the first.implicitGiven [a, b, c, ... n], return the pairs [(a, b), (b, c), ... (n, a)].3 Safe-Inferredf4 Safe-InferredhimplicitDefine a Box2 around the given object, and the space it occupies while rotating about the center point. Note: No implementations for Square, Translate2, or Scale2 as they would be identical to the fallthrough.implicitput a box around a point, and all of the locations it will be at during an x degree arc around (0,0). Safe-Inferred(n implicitWe have to define our own variant of Eq which compares objects when possible and returns True when we cannot compare things like functionsimplicitA pattern that abstracts over ? and 8. Can't be in hs-boot  1https://gitlab.haskell.org/ghc/ghc/-/issues/14478 so we duplicate it hereimplicit Map over  SharedObj and its underlying objectsThis resembles bimap from Bifunctor but the structure of SharedObj doesn't allow us to define Bifunctor instance as we need to map over the first type argument (obj) and not f and a.implicit Map over  SymbolicObj2" and its underlying shared objects#This function is co-recursive with  fmapSharedObj1 to achieve deep mapping over objects nested in Shared2 constructorimplicit Map over  SymbolicObj3" and its underlying shared objects#This function is co-recursive with  fmapSharedObj1 to achieve deep mapping over objects nested in Shared3 constructorimplicit:Rewrite the object tree until it cannot be reduced furtherimplicit Canonicalize  SymbolicObj2 treeimplicit Canonicalize  SymbolicObj3 treeimplicitRewrite rules for  SymbolicObj2implicitRewrite rules for  SymbolicObj3implicitRewrite rules for  SharedObjimplicitSymbolicObj2 transformationimplicitSymbolicObj3 transformationimplicitShared2|3 transformationimplicitSymbolicObj3 transformationimplicitSymbolicObj2 transformationimplicitShared2|3 transformationimplicitSymbolicObjN transformation Safe-Inferred"pimplicit8Class which allows us to build the contained objects in .implicitFormat an openscad call given that all the modified objects are in the Reader monad...implicitUnpack a dimensionality-polymorphic vector into multiple arguments.implicitUnpack a dimensionality-polymorphic vector into a single argument.implicitBuild the common combinators.implicitFirst, the 3D objects. Safe-Inferred"timplicit+Use the old syntax when defining arguments.implicit;The only thing exported here. basically, a list of modules.implicitsphere is a module without a suite. this means that the parser will look for this like sphere(args...);implicitFIXME: square1, square2 like cylinder has? FIXME: translate for square2?implicitFIXME: 3D Polygons? FIXME: handle rectangles that are not grid alligned. FIXME: allow for rounding of polygon corners, specification of vertex ordering. FIXME: polygons have to have more than two points, or do not generate geometry, and generate an error.implicitFIXME: rotating a module that is not found pures no geometry, instead of an error. FIXME: error reporting on fallthrough. FIXME: rotate(y=90) would be nice.implicitFIXME: avoid the approximation in getBox3. better definition of function()?implicitLike , but operates in degrees instead of radians. This is a shim for scad, which expects this function to operate in degrees.5 Safe-Inferred"u:implicitmore complicated ones: Safe-Inferreduimplicit1Define variables used during the extOpenScad run.implicitEvaluate an expression. Safe-InferredvAimplicit8Small wrapper of our parser to handle parse errors, etc.6 Safe-Inferredvimplicit>getContour gets a polyline describing the edge of a 2D object.00000 Safe-Inferredw  Safe-Inferredw3 Safe-InferredximplicitThere is a discrete way to aproximate this object. eg. Aproximating a 3D object with a triangle mesh would be DiscreteApproxable Obj3 TriangleMesh Safe-Inferred{implicitWrite an object to a file with LazyText IO, using the given format writer function.implicitSerialize an object using the given format writer, which takes the filename and writes to it..implicitSerialize an object using the given format writer. No file target is implied.implicit%Output a file containing a 3D object.implicit%Output a file containing a 2D object.implicit Resolutionimplicit*File Format Writer (Function that formats)implicit File NameimplicitObject to renderimplicitWriting Action!implicit ResolutionimplicitFile Format writerimplicit File NameimplicitObject to renderimplicitWriting Action!implicit Resolutionimplicit*File Format Writer (Function that formats)implicitObject to renderimplicitResult   Safe-Inferred]implicitExport a PNG of the .. The projection is with a front-facing camera, so the coordinate system is +(left to right, front to back, down to up). implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-2) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-2) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-2) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-2) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-2) more time.implicitRendering resolution, in millimeters. Smaller values produce exports more faithful to the implicit model, at the expense of taking O(n^-3) more time.'()*+,-.9)('9.*+,- Safe-Inferred"(implicit#Find the resolution to raytrace at.7897897:;7:;7<=7<=>?@ABCDEFGHIJKLMNOPQRSTUVVWXYZ[\\]^_`abcdefghijklmnopqrstuvvwxyz{|}~                        /243                                                   !!!!!!!!!"###$$$$$%&'''()))*+++,-............... 00111111111111112244556666666'implicit-0.4.1.0-GiHzMobEr4MHjJlOfSSA66Graphics.ImplicitGraphics.Implicit.Definitions%Graphics.Implicit.Export.OutputFormat(Graphics.Implicit.Export.Render.GetLoops)Graphics.Implicit.ExtOpenScad.Definitions)Graphics.Implicit.ExtOpenScad.Parser.Expr.Graphics.Implicit.ExtOpenScad.Parser.Statement,Graphics.Implicit.Export.TriangleMeshFormats(Graphics.Implicit.Export.PolylineFormats2Graphics.Implicit.Export.NormedTriangleMeshFormatsGraphics.Implicit.MathUtilGraphics.Implicit.PrimitivesGraphics.Implicit.ObjectUtil(Graphics.Implicit.Export.SymbolicFormatsGraphics.Implicit.Canon(Graphics.Implicit.ExtOpenScad.Primitives+Graphics.Implicit.ExtOpenScad.Eval.ConstantGraphics.Implicit.ExtOpenScad%Graphics.Implicit.Export.SymbolicObj3%Graphics.Implicit.Export.SymbolicObj2*Graphics.Implicit.Export.DiscreteAproxableGraphics.Implicit.Export#Graphics.Implicit.Export.Resolution*Graphics.Implicit.ExtOpenScad.Parser.LexerGraphics.Implicit.FastIntUtilGraphics.Implicit.IntegralUtilGraphic.Implicit.Primitivesunion)Graphics.Implicit.ExtOpenScad.Util.StateC'Graphics.Implicit.ExtOpenScad.Util.OVal,Graphics.Implicit.ExtOpenScad.Util.ArgParser)Graphics.Implicit.ExtOpenScad.Parser.Util'Graphics.Implicit.ExtOpenScad.Eval.Expr,Graphics.Implicit.ExtOpenScad.Eval.StatementGraphics.Implicit.Export.Util)Graphics.Implicit.Export.TextBuilderUtils*Graphics.Implicit.Export.Symbolic.Rebound3*Graphics.Implicit.Export.Symbolic.Rebound2*Graphics.Implicit.Export.Render.RefineSegs+Graphics.Implicit.Export.Render.Interpolate/Graphics.Implicit.Export.Render.HandlePolylines'Graphics.Implicit.Export.Render.GetSegs+Graphics.Implicit.Export.Render.Definitions.Graphics.Implicit.Export.Render.TesselateLoops-Graphics.Implicit.Export.Render.HandleSquares!Graphics.Implicit.Export.RayTrace)Graphics.Implicit.ObjectUtil.GetImplicit3.Graphics.Implicit.ObjectUtil.GetImplicitShared)Graphics.Implicit.ObjectUtil.GetBoxShared)Graphics.Implicit.ObjectUtil.GetImplicit2$Graphics.Implicit.ObjectUtil.GetBox3$Graphics.Implicit.ObjectUtil.GetBox2%Graphics.Implicit.ExtOpenScad.DefaultGraphics.Implicit.Export.Render!linear-1.22-RQ2AYz1OLxFCpCY5CLqBOLinear.Quaternion Quaternion Linear.V3V3 Linear.V2V2 OutputFormatSVGSCADPNGGCodeASCIISTLSTLTHREEJSOBJDXFdef2Ddef3D formats2D formatIs2D formats3D formatIs3DformatExtensionsguessOutputFormatformatExtension$fReadOutputFormat$fDefaultOutputFormat$fShowOutputFormat$fEqOutputFormatgetLoopsFastℕ fromFastℕ toFastℕℕfromℕtoℕℝ3'ℝ3ℝ2ℝ ExtrudeMScaleC1C2Fn SymbolicObj3CubeSphereCylinderRotate3 Transform3ExtrudeExtrudeM RotateExtrudeExtrudeOnEdgeOfShared3 SymbolicObj2SquareCirclePolygonRotate2 Transform2Shared2 ObjectContextobjectRounding SharedObjEmptyFull ComplementUnionR DifferenceR IntersectR TranslateScaleMirrorOutsetShell EmbedBoxedObj WithRounding BoxedObj3 BoxedObj2Boxed3Boxed2Box3Box2Obj3Obj2NormedTriangleMeshgetNormedTriangles TriangleMesh getTrianglesNormedTriangleTrianglePolytriPolyline getSegmentsComponentWiseMultable⋯*⋯/minℝ fromℕtoℝfromFastℕtoℝfromℝtoFloatdefaultObjectContext toScaleFn isScaleIDquaternionToEulerhasZeroComponent $fEqℝ3'$fWrappedℝ3'$fRewrappedℝ3't$fComponentWiseMultableV3$fComponentWiseMultableV2$fNFDataPolyline$fNFDataPolytri$fNFDataTriangle$fNFDataNormedTriangle$fNFDataTriangleMesh$fShowBlackhole$fShowSharedObj$fMonoidSymbolicObj2$fSemigroupSymbolicObj2$fShowSymbolicObj2$fShowExtrudeMScale$fMonoidSymbolicObj3$fSemigroupSymbolicObj3$fShowSymbolicObj3$fGenericSymbolicObj3$fGenericExtrudeMScale$fGenericSymbolicObj2$fEqObjectContext$fOrdObjectContext$fShowObjectContext$fGenericSharedObj TestInvariantEulerCharacteristicScadOptsopenScadCompatibilityimportsAllowedMessage MessageTypeTextOutWarningError SyntaxError Compatibility UnimplementedSourcePositionOVal OUndefinedOErrorOBoolONumOListOStringOFuncOIOOUModuleONModule OVargsModuleOObj3OObj2 StatementInclude:=If NewModule ModuleCall DoNothing StatementIExprVarLitEListELamE:$PatternNameListPWild VarLookupSymbol ArgParserAP APTerminatorAPFail APExampleAPTestAPBranchStateC CanCompState CanCompState' ImplicitCadMunImplicitCadM CompStatescadVarsoVals sourceDirrunImplicitCadMvarUnion lookupVarIn$fShowSourcePosition $fShowMessage$fDefaultScadOpts $fShowOVal$fEqOVal$fAlternativeArgParser$fMonadPlusArgParser$fMonadArgParser$fApplicativeArgParser$fFunctorArgParser$fShowStatementI$fEqStatementI$fShowStatement $fEqStatement $fShowExpr$fEqExpr$fShowVarLookup $fEqVarLookup$fShowCompState$fShowTestInvariant$fShowScadOpts $fEqScadOpts $fEqMessage$fShowMessageType$fEqMessageType$fEqSourcePosition $fShowPattern $fEqPattern $fShowSymbol $fEqSymbol $fOrdSymbol$fMonadReaderrImplicitCadM$fMonadWriterwImplicitCadM$fMonadStatesImplicitCadM$fMonadIOImplicitCadM$fMonadImplicitCadM$fApplicativeImplicitCadM$fFunctorImplicitCadMexpr0 parseProgramstl binaryStljsTHREEsvgdxf2hacklabLaserGCodeobjdistFromLineSeg box3sWithinrmaxrmaximumrminimumpackreflectalaV3packV3unpackV3inftyObjectSpace_SharedgetBox getImplicit' canonicalize emptySpace fullSpace getImplicit getImplicit3 getImplicit2getBox2getBox3scad2scad3$fBuildSymbolicObj3$fBuildSymbolicObj2EqObj=^= fmapSharedObjfmapObj2fmapObj3rewriteUntilIrreducible canonicalize2 canonicalize3$fEqObjSymbolicObj3$fEqObjSymbolicObj2$fEqObjExtrudeMScale$fEqObjSharedObj $fEqObj[]Sharedsphererect3cube cylinder2cylinderconetorus ellipsoidcirclerectsquarepolygon translatescale complement withRoundingmirroroutsetshellunionR differenceR intersectRimplicit difference intersectextrudeextrudeM rotateExtrudeextrudeOnEdgeOfrotate3rotateQrotate3V transform3pack3rotate transformpack2$fObjectSymbolicObj3V3Double$fObjectSymbolicObj2V2DoubleprimitiveModules addConstantsrunExpr runOpenscadsymbolicGetMeshsymbolicGetContourDiscreteAproxable discreteAprox+$fDiscreteAproxableSymbolicObj2DynamicImage!$fDiscreteAproxableSymbolicObj2[]+$fDiscreteAproxableSymbolicObj3DynamicImage1$fDiscreteAproxableSymbolicObj3NormedTriangleMesh+$fDiscreteAproxableSymbolicObj3TriangleMesh writeObject formatObjectwriteSVG writeDXF2writeSTL writeBinSTLwriteOBJ writeTHREEJSwriteGCodeHacklabLaser writeSCAD3 writeSCAD2writePNGexport3export2 writePNG2 writePNG3estimateResolutionreadOutputFormat getLoops' whiteSpace matchModule matchFunctionmatchIf matchElsematchLet matchEach matchTrue matchFalse matchUndef matchIncludematchUsematchTok matchColon matchSemi matchCommamatchLE surroundedBymatchIdentifierlexermatchLTmatchGEmatchGTmatchEQmatchNEmatchANDmatchORmatchCATmatchEXPghc-prim GHC.TypesDouble BlackholebaseGHC.ShowShow@||/show-combinators-0.2.0.0-3BBnY64EChFGGgrScLfM9KText.Show.Combinators@| lookupVargetPath getVarLookupmodifyVarLookuppushValsgetValsputValswithPathShiftedBy getRelPath addMessageerrorCwarnC scadOptions OTypeMirrorfromOObjtoOObjoTypeStr getErrors caseOType<||> divideObjsargumentdoc defaultToexampletestargMapeulerCharacteristicpatternMatchernumbervariableboolean scadString*<|>?:tryMany scadUndefinedsourcePositionnonAssociativeExpr variableishvectorListParentheses collectorbinaryOperation assignmentbindLets computationsuite statementI throwAwayincludefunction ifStatementI userModuleuserModuleDeclarationmoduleArgsUnitmoduleArgsUnitDecl sourcePos removeNoOpspatVarspatMatchmatchPatevalExprStateE ExprState rawRunExpr runStatementI normTriangle normVertexcentroidbfbuildTruncFloat text-1.2.5.0Data.Text.Internal.LazyTextData.Text.Internal.BuilderBuildertoLazyTextWith fromLazyTextData.Text.Lazy toLazyTextbuildℕbuildInt cleanupTristoFloatrebound3rebound2refinedetail'detail interpolatejoinSegsreducePolylinecleanLoopsFromSegsgetSegs TriSquareTrisSq tesselateLoopmergedSquareTrisColorLightRayvectorDistance colorMultaverage rayFromToSceneCamera cameraRaytraceRayrmin!lens-5.2.3-3cXTu36AL3ZDwyqobMNc8qControl.Lens.TypePrism' GHC.MaybeJust normalizegetImplicitShared VectorStuffcornersuniformVGHC.Basepure pointwiseliftA2elements Data.FoldabletoListintersectBoxesbiappemptyBoxfullBox pointsBox unionBoxesisEmpty outsetBox getBoxSharedscanUniqueCircular circularPairsgetBox2R pointRBoxcanon2canon3 canonSharedBuild buildShared callToken vectAsArgsbvectbuildS3rotateExtrudeDegreesdefaultPolymorphicFunctionsdefaultObjects getContourgetMesh$***$***$$**$ writeObject'