<p>I have .stl for the 3d printing. And I want to analysis wall thickness of this model before printing. I have no idea about any tools. Can I create any console or wpf app for calculating wall thickness and cost of the printing. 
Please help me.   </p>

[{'answer_id': 4920, 'author': 'Athanasios Karagiannis', 'author_id': 8725, 'author_profile': 'https://3dprinting.stackexchange.com/users/8725', 'pm_score': 2, 'selected': False, 'text': "<p>If your talking about a hollow object, such as a cube with a hollow center. The wall thickness is determined by the model.</p>\n\n<p>If your talking about a solid object, the wall thickness is determined by your nozzle diameter multiplied by your # of walls. This is all adjusted by your splicing software. If you have a nozzle of 0.5mm and you print at 3 perimeters, your wall should be 1.5mm. If you want the wall to be 2mm, then you will adjust your perimeters to 4. Everything within those walls will be whatever you choose for infill.</p>\n\n<p>I work with ASP.NET, Windows Forms, and Console Apps myself. I'm sure you can find libraries capable of taking 3D models but I don't think it would matter because the printed thickness is determined by your splicing settings. </p>\n\n<p>Also for cost of printing, I recommend just using Cura which you just have to plug in some cost information about the filament and it will tell you estimated cost, mm of filament usage, and time.</p>\n"}, {'answer_id': 5098, 'author': 'markshancock', 'author_id': 6417, 'author_profile': 'https://3dprinting.stackexchange.com/users/6417', 'pm_score': 1, 'selected': False, 'text': '<p>If your concern is that the stl file may have walls that are too thin to print on your printer, <a href="https://www.meshmixer.com/" rel="nofollow noreferrer">MeshMixer</a> is a great tool from <a href="https://www.autodesk.com" rel="nofollow noreferrer">Autodesk</a> to help check and fix mesh issues (including wall thickness).  It is free to Makers and Educators.</p>\n\n<p>There are lots of helpful tutorials\nHere is one <a href="https://all3dp.com/meshmixer-tutorial/" rel="nofollow noreferrer">https://all3dp.com/meshmixer-tutorial/</a></p>\n'}, {'answer_id': 5106, 'author': 'user802599', 'author_id': 1476, 'author_profile': 'https://3dprinting.stackexchange.com/users/1476', 'pm_score': 1, 'selected': False, 'text': '<p>I\'m not completely sure what you want to do but I will add some information that I think will help and then hopefully you can figure out what you need to know or ask another question.</p>\n\n<p>When you are asking about wall thickness there are two different things you could be referring to. A wall in the model, so you could be talking about trying to print a thin wall coming out of the model. For analysis thin wall setting some slicers will change the extrusion amount to print thicker or thinner lines, and to find those settings you would need to look at the g-code.\nOr you could be talking about the shell of the model, the outside surface, and for this you could also analysis in the slicer settings by looking at the number of perimeters the slicer will try and print. </p>\n\n<p>For calculating the cost of the print you will want the amount of material used, this will also be in the g-code file. You can eather calculate this by going through each G1 command and finding out how much filament was extruded for each move the printer made. (Not some slicers reset this to zero after each layer and this gets tricky when the printer starts retracting the filament while traveling).\nOr most slicers have a commented out line of g-code at the beginning or end of the file listing how much filament will be used.</p>\n\n<p>If you do analysis the .stl file you also might find that you need to repair the model file as well, Because alot of .stl files are made for 3D graphics and not for printing and so they can have intersecting triangles and not be water tight. </p>\n\n<p>Not all .stl files are the same they can be text or binary files, this is some c# code that will read both formats into a list of the triangles in the file for you.</p>\n\n<pre><code>using System.Numerics.Vectors; \nvoid Main(){\nvar facets = readStl(@"C:\\stls\\teapot.stl");}\n\npublic class facet\n{\n    public Vector3 norm = new Vector3();\n    public Vector3 vecA = new Vector3();\n    public Vector3 vecB = new Vector3();\n    public Vector3 vecC = new Vector3();\n    public facet(Vector3 A, Vector3 B, Vector3 C, Vector3 N)\n    {\n        norm = N;\n        vecA = A;\n        vecB = B;\n        vecC = C;\n    }\n}/* facet */\n\n\npublic static System.Collections.Generic.List&lt;facet&gt; readStl(string file)\n{\n    // check if binary or text fomat\n    //Console.WriteLine("the middle");\n    bool isText;\n    System.Collections.Generic.List&lt;facet&gt; facets = new System.Collections.Generic.List&lt;facet&gt;();\n    using (System.IO.BinaryReader reader = new System.IO.BinaryReader(System.IO.File.Open(file, System.IO.FileMode.Open)))\n    {\n        //Console.WriteLine("Checking if binary");\n        string fileHeading;\n        fileHeading = new string(reader.ReadChars(80));\n        if (fileHeading.Contains(@"solid"))\n        {\n            isText = true;\n            //Console.WriteLine("isText true");\n        }\n        else\n        {\n            isText = false;\n            //Console.WriteLine("isText false");\n        }\n        if(!isText)\n        {\n            // process binary file\n            Console.WriteLine("Is binary");\n            uint numberOfTriangles = reader.ReadUInt32();\n            //Debug.Log("Number of Triangles: " + numberOfTriangles.ToString());\n            System.Console.WriteLine("Number of Triangles: " + numberOfTriangles.ToString());\n            for(int i = 0; i &lt; numberOfTriangles - 1; i++)\n            {\n                Vector3 normals = new Vector3();\n                Vector3 vecA = new Vector3();\n                Vector3 vecB = new Vector3();\n                Vector3 vecC = new Vector3();\n                System.UInt16 byteCount = new System.UInt16();\n                normals.X = reader.ReadSingle();\n                normals.Y = reader.ReadSingle();\n                normals.Z = reader.ReadSingle();\n                vecA.X = reader.ReadSingle();\n                vecA.Y = reader.ReadSingle();\n                vecA.Z = reader.ReadSingle();\n                vecB.X = reader.ReadSingle();\n                vecB.Y = reader.ReadSingle();\n                vecB.Z = reader.ReadSingle();\n                vecC.X = reader.ReadSingle();\n                vecC.Y = reader.ReadSingle();\n                vecC.Z = reader.ReadSingle();\n                byteCount = reader.ReadUInt16();\n                facets.Add(new facet(vecA, vecB, vecC, normals));\n            }\n        }\n    }\n    if (isText)\n    {\n        // read text format file\n        Console.WriteLine("Is text file");\n        //Console.WriteLine("reading text file");\n        using (System.IO.StreamReader reader = System.IO.File.OpenText(file))\n        {\n            string line = @"";\n            string fileHeader = @"";\n            line = reader.ReadLine();\n            fileHeader = line.Substring(line.IndexOf("solid") + 5).Trim();\n            line = "";\n            System.Console.WriteLine(@"file header: " + fileHeader);\n            bool endOfFile = true;\n            while (endOfFile)\n            {\n                line = reader.ReadLine();\n                if (!reader.EndOfStream)\n                {\n                    Vector3 normals = new Vector3();\n                    Vector3 vecA = new Vector3();\n                    Vector3 vecB = new Vector3();\n                    Vector3 vecC = new Vector3();\n                    string[] nums = line.Replace("facet", "").Replace("normal", "").Trim().Split(\' \');\n                    normals.X = (float)System.Double.Parse(nums[0], System.Globalization.NumberStyles.Float);\n                    normals.Y = (float)System.Double.Parse(nums[1], System.Globalization.NumberStyles.Float);\n                    normals.Z = (float)System.Double.Parse(nums[2], System.Globalization.NumberStyles.Float);\n                    line = "";\n                    line = reader.ReadLine(); // outer loop\n                    line = reader.ReadLine(); // vertex \n                    string[] vecsA = line.Replace("vertex", "").Trim().Split(\' \');\n                    vecA.X = (float)System.Double.Parse(vecsA[0], System.Globalization.NumberStyles.Float);\n                    vecA.Y = (float)System.Double.Parse(vecsA[1], System.Globalization.NumberStyles.Float);\n                    vecA.Z = (float)System.Double.Parse(vecsA[2], System.Globalization.NumberStyles.Float);\n                    line = "";\n                    line = reader.ReadLine(); // vertex \n                    string[] vecsB = line.Replace("vertex", "").Trim().Split(\' \');\n                    vecB.X = (float)System.Double.Parse(vecsB[0], System.Globalization.NumberStyles.Float);\n                    vecB.Y = (float)System.Double.Parse(vecsB[1], System.Globalization.NumberStyles.Float);\n                    vecB.Z = (float)System.Double.Parse(vecsB[2], System.Globalization.NumberStyles.Float);\n                    line = "";\n                    line = reader.ReadLine(); // vertex \n                    string[] vecsC = line.Replace("vertex", "").Trim().Split(\' \');\n                    vecC.X = (float)System.Double.Parse(vecsC[0], System.Globalization.NumberStyles.Float);\n                    vecC.Y = (float)System.Double.Parse(vecsC[1], System.Globalization.NumberStyles.Float);\n                    vecC.Z = (float)System.Double.Parse(vecsC[2], System.Globalization.NumberStyles.Float);\n                    line = "";\n                    line = reader.ReadLine(); // endloop\n                    line = reader.ReadLine(); // endfacet\n                    facets.Add(new facet(vecA, vecB, vecC, normals));\n                }\n                else\n                {\n                    endOfFile = false;\n                }\n            }// while loop\n            System.Console.WriteLine("finished reading file");\n        }\n    }\n    return facets;\n}/* readStl */\n</code></pre>\n'}]
['https://3dprinting.stackexchange.com/questions/4911', 'https://3dprinting.stackexchange.com', 'https://3dprinting.stackexchange.com/users/8962/']